The LattePanda IOTA

A couple of months ago, DFRobot reached out to see if I wanted to take a look at the new LattePanda IOTA single-board computer–successor to the original LattePanda V1. I never owned a V1 myself, but I have found quite a few in the wild; they were popular with integrators for kiosk and digital signage applications. I was curious to see how the new model stacked up.

The LattePanda IOTA, merrily doing its thing
The LattePanda IOTA, merrily doing its thing

Also, and even though the V1 has been around for a good while, I think there is a shift back to Intel-based SBCs outside the hobbyist scene (largely thanks to Intel’s Twin Lake CPUs). The IOTA interests me because it’s at the intersection of that shift and the large community that LattePanda created with their development boards.

Disclaimer: DFRobot sent me an IOTA and several expansion boards free of charge, and this post follows my .

This review turned out to take a lot more time to put together than usual because besides a bump in my usual workload I also complicated matters by trying to record a video at the same time, so expect that to pop up on YouTube in a week or so–I am developing a theory that everything takes twice as long when you need to deal with cameras, and four times as long if they’re recording video…

In The Box

I got a lot more than the IOTA in my shipment, to the degree where I don’t think I will be able to do everything justice in a single post:

  • A LattePanda IOTA with 8GB RAM/64GB eMMC (plus an RTC battery).
  • An active cooler.
  • An M.2 M-key expansion board that takes a 2230/2280 SSD and plugs into the main board’s PCIe 3.0 port via an FPC ribbon cable.
  • An M.2 4G LTE expansion board. This is a daughtercard with a SIM slot that physically stacks atop the Wi-Fi card and plugs a few power pins into the GPIO ports, ready for you to plug in an M.2 LTE module.
  • A 51W POE++ board that also plugs into the main board via FPC, providing an additional Realtek RTL8111H gigabit NIC (that worked fine with all operating systems I tested with).
  • A UPS board that takes three standard 18650 Li-ion batteries and provides an alternate set of power inputs (a barrel jack and another USB PD).
The four expansion boards I received

Of all of these, I have to admit the one I was initially most excited about was the LTE board, although I quickly found out I don’t have a compatible M.2 LTE module (something I will try to fix in the near future).

However, I do have some ideas for the UPS board, since we’ve been having some power outages lately and even though I already have a UPS for my main servers it would be nice to replace one of my smaller servers with something that could stand on its own–and I have a particular use for it out in the countryside.

Hardware

Both sides of the board, without heatsink
Both sides of the board, without heatsink

The IOTA is built around Intel’s Twin Lake N150 processor, a quad-core x86 chip clocked up to 3.6 GHz. For those who care about those details, the CPU comes with 6MB cache and 24 EU Intel UHD Graphics, but the more important thing is that the IOTA makes use of it in 8GB or 16GB LPDDR5 variants with in-band ECC (which I believe to be relatively rare in SBCs), and each of those SKUs is matched with 64GB or 128GB eMMC 5.1 storage.

The version I tested has these specs:

  • Intel N150 (quad-core, 4 threads, up to 3.6 GHz, 6MB cache, 24 EU GPU)
  • 8GB LPDDR5 RAM / 64GB eMMC 5.1 storage
  • HDMI 2.1 (4K@60Hz) and eDP 1.4b FFC connector (2‑lane, up to 1080p@60)
  • 3× USB 3.2 Gen2 Type-A (10 Gbps) + one USB 2.0 header
  • 1× GbE RJ45 with Wake-on-LAN
  • 1× M.2 E-Key (Wi-Fi/BT)
  • 1× PCIe 3.0 x1 FPC connector
  • 1× MicroSD slot
  • a 36-pin GPIO header driven by an

…plus a 3.5 mm audio jack and two options for power: USB PD (which is what I used, with a high-efficiency GAN charger) and a DC input on the board itself.

And, of course, as a little spoiler, all of it is completely Linux compatible:

 lspci
00:00.0 Host bridge: Intel Corporation Alder Lake-N Processor Host Bridge/DRAM Registers
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [Intel Graphics]
00:0a.0 Signal processing controller: Intel Corporation Platform Monitoring Technology (rev 01)
00:14.0 USB controller: Intel Corporation Alder Lake-N PCH USB 3.2 Gen 2x1 (10 Gb/s) xHCI Host Controller
00:14.2 RAM memory: Intel Corporation Alder Lake-N PCH Shared SRAM
00:15.0 Serial bus controller: Intel Corporation Alder Lake-N PCH I2C Controller
00:16.0 Communication controller: Intel Corporation Alder Lake-N PCH HECI Controller
00:1a.0 SD Host controller: Intel Corporation Alder Lake-N eMMC Controller
00:1c.0 PCI bridge: Intel Corporation Alder Lake-N PCI Express Root Port #7
00:1f.0 ISA bridge: Intel Corporation Alder Lake-N PCH eSPI Controller
00:1f.3 Audio device: Intel Corporation Alder Lake-N PCH High Definition Audio Controller
00:1f.4 SMBus: Intel Corporation Alder Lake-N SMBus
00:1f.5 Serial bus controller: Intel Corporation Alder Lake-N SPI (flash) Controller
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller (rev 15)

Upgrading from the LattePanda V1

Compared to the original LattePanda V1, the IOTA is a significant leap forward on paper:

  • The N150 CPU is around four times faster than the 1.44GHz Atom x5-Z8350 the V1 shipped with.
  • The same applies to the RAM capacity, which can now go up to 16GB LPDDR5 with ECC, over the original 2/4GB.
  • eMMC storage is roughly equivalent, but part evolution means that the IOTA’s is naturally faster.

And while I mostly confirmed those figures (see below), the key thing is that you get a completely modern baseline– faster USB connectivity, PCIe 3.0 and an RP2040 to replace the older ATmega32U4 chip.

But what I really like is that the form factor is nearly identical (save minor variations in connectors, of course), so I suspect most industrial enclosures will fit. And, of course, the IOTA is more power efficient (the Atoms were never the coolest chips in the block, style or temperature-wise).

Like I said above I’ve found a few V1s in the wild in all manner of solutions, so I think integrators will appreciate that the IOTA was designed as a drop-in upgrade.

Software

One of the big advantages of the IOTA when compared to the other single-board computers I’ve been over the years is that you have full choice of operating systems and guaranteed hardware and software compatibility, with a standard UEFI BIOS and no vendor-specific kernel patches to worry about. So although I still have a soft spot for ARM-based SBCs, I do appreciate being able to run whatever OS I want without worrying about low-level support, obsolete kernels or missing drivers.

BIOS

Like the I tested recently, the IOTA has a very comprehensive BIOS with all that you could wish for–including explicit fan curve settings that I have been experimenting with.

Maybe even more options than a standard mini-PC

For instance, one thing I always switch on is Wake-on-LAN, and I also typically set up power recovery options to my liking–all things that are easily done in a standard BIOS and that I appreciate having on an SBC.

Windows

Like other LattePanda boards, the IOTA ships with Windows 11–and like all N150 machines I’ve had to run Windows on, the first boot is snappy but you’re best served by leaving it overnight to run Windows Update, which in this case was hampered by the eMMC (it’s not exactly slow, but like a blade of grass amidst the thundering herd of Windows Update).

The Windows 11 experience, out of the box.

However, I didn’t spend much time in Windows.

Proxmox

After fitting a small 512GB NVMe, installed without any issues–but since I wanted to test the UPS module and couldn’t really use it together with the NVMe drive, I soon realized that I had to use another Linux distribution since refuses to install to the internal eMMC–I usually work around that by installing first and then adding the repositories, but this time around I decided to do something different.

Talos Linux

Yes, you can run on it (and ) without any issue–I just grabbed an image off the Factory, booted it and it was able to install to the NVMe. But although that is what my IOTA will eventually end up running, I needed something a bit more conventional to do my testing.

Fedora Silverblue

Since I had such good results recently running Silverblue on , I installed it on the IOTA’s internal eMMC while I sorted out how to stack the modules I want in a custom case.

That gave me full hardware support–all built-in chipset devices, the and the expansion modules I tested all worked:

 lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda            8:0    1    0B  0 disk
sdb            8:16   1    0B  0 disk
mmcblk0      179:0    0 58.2G  0 disk
├─mmcblk0p1  179:1    0  600M  0 part /boot/efi
├─mmcblk0p2  179:2    0    1G  0 part /boot
└─mmcblk0p3  179:3    0 56.7G  0 part /var/home
                                      /var
                                      /sysroot/ostree/deploy/fedora/var
                                      /sysroot
                                      /etc
mmcblk0boot0 179:8    0    4M  1 disk
mmcblk0boot1 179:16   0    4M  1 disk
zram0        251:0    0  7.5G  0 disk [SWAP] sensors
acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +35.0°C  (high = +105.0°C, crit = +105.0°C)
Core 0:        +35.0°C  (high = +105.0°C, crit = +105.0°C)
Core 1:        +36.0°C  (high = +105.0°C, crit = +105.0°C)
Core 2:        +36.0°C  (high = +105.0°C, crit = +105.0°C)
Core 3:        +36.0°C  (high = +105.0°C, crit = +105.0°C)

But since I think most people coming here will want to know how much of an improvement the IOTA is over the V1, I’m going to go straight into the performance part:

Performance

If you’ve read my previous posts on N150 devices, you know what to expect: The IOTA is a solid performer, and while it won’t set any records in CPU benchmarks when compared to a mainstream desktop CPU, it’s perfectly adequate for light server workloads, web browsing, office productivity and media consumption–I’ve been using for a few months now for exactly that, and the IOTA is pretty much equivalent to it.

But, more importantly for what it is designed to do, it is a tiny little beast for embedded applications. In fact, it is likely much more performant than anything you really need for an industrial setting, and I can see it being a great upgrade for digital signage solutions based on the V1.

Since I actually have an Atom x5-Z8350 system that is equivalent to the V1 (a mini-PC), I ran a few comparisons between the two:

  • the IOTA was nearly five times faster than the Atom in CPU-bound tasks (sysbench results were 4.8 times faster).
  • …and around six to eight times faster in simple OpenGL benchmarks. It also has no trouble playing 4K video, although (realistically) if you are going to use it for signage your biggest constraint is going to be your physical panel.

As to storage performance, that is hardly comparable due to architecture differences, but the built-in eMMC is decent for what it is–I ran fio with my usual invocation:

 fio --filename=/var/fio --size=5GB --direct=1 --rw=randrw --bs=64k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=4 --time_based --group_reporting --name=random-read-write --eta-newline=1

And got acceptable, but not earth-shattering results:

read: IOPS=622, BW=38.9MiB/s (40.8MB/s)(4671MiB/120005msec)
write: IOPS=625, BW=39.1MiB/s (41.0MB/s)(4692MiB/120005msec)

This may seem slow compared to SSDs, but I found it adequate even when running a Linux desktop environment (although you will want to avoid heavy swap usage). Using the NVMe adapter was noticeably faster, but the PCIe 3.0 FPC connector is limited to x1 speeds, so doing comparisons is a bit moot.

Again, it is much more than adequate for general use, let alone embedded applications.

Thermals

Depending on your application, the IOTA can idle at 36°C (in Linux) or… 46°C (in Windows). But either way, the active cooler does an excellent job of cooling it down.

As usual, I ran a CPU stress test and plotted a couple of charts:

Temperature during my stress tests The latter peaks are from me running a few updates after the main run, and I thought they were a good example of how the machine deals with short peak loads.
Temperature during my stress tests

Again, this was done with BIOS defaults (power limits set to 10000 and 20000) and the active cooler, at around 24°C ambient.

But the temperature never got past 75°C. In particular, when compared to the other Alder Lake devices I tested this year (including the beefier ), the clock speed is remarkably stable during sustained load:

CPU clock across all cores
CPU clock across all cores

Of course, this is all with the standard BIOS settings (and drawing less than 6W off the wall) so your mileage may vary–but, again, even if you can get this to clock higher, it will still be a lot more CPU power than a typical embedded application will require.

I have seen a few people online tweaking the BIOS power limit to be even lower and still getting acceptable results, so I suspect that even with a passive cooler it will be possible to get very good performance out of the IOTA.

Noise

The active cooler is reasonably quiet under normal loads, but the fan can get quite noisy (and a tad whiny) under sustained load. In a very quiet office (and given my propensity to have everything fanless and utterly quiet) it got a little annoying and even whiny as I was testing things.

While in a typical embedded scenario noise won’t be your first concern, you should bear in mind that you’ll need to tweak the BIOS fan settings (or run the IOTA with a lower power limit and a passive cooler) if you need absolute quiet.

RP2040 and GPIOs

The IOTA’s GPIO connector provides direct access to the onboard ’s pins:

The RP2040 GPIOs mapped out
The RP2040 GPIOs mapped out

Since the IOTA’s RP2040 comes with MicroPython installed, I used that to play around with a bit.

I’ve written at length about the benefits of marrying a general-purpose MCU like the RP2040 with a beefier CPU (like when I reviewed the ), so I won’t go into that again here other than pointing out that despite having to sort out communication between the MCU and the host CPU in your code, using the RP2040’s PIO will give you much finer resolution and control for some purposes than what you’d get by tying in the GPIOs directly to the Intel bus, so I see it as a win-win.

As it happens, the LattePanda team already sorted that out for you and provides a prebuilt image of telemetrix, a Python “bridge” that runs against a server you can flash to the onboard RP2040. Flashing it is trivial, and works just like any other RP2040 device: Just hit RST and hold down BOOT, and you’ll be able to drop in a UF2 file to your liking:

RP2040 device mount shown in Nautilus I plan to play around with this a bit more when I set up the
RP2040 device mount shown in Nautilus
IOTA permanently at a remote location, but to do that I need to sort out another thing: the UPS module.

Using the UPS Module

The booklet that comes with the UPS module mentions that it is only compatible with Windows, and I’ve even seen other reviews that state the same, but as it happens the usbhid device is immediately detected in Linux:

 lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
Bus 001 Device 003: ID 2e8a:0005 MicroPython Board in FS mode
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

…and if you install NUT, nut-scanner immediately picks it up:

 nut-scanner
Scanning USB bus.
No IP range(s) requested, skipping SNMP
Scanning XML/HTTP bus.
No IP range(s) requested, skipping NUT bus (old libupsclient connect method)
Scanning NUT simulation devices.
Scanning NUT bus (avahi method).
Scanning IPMI bus.
[nutdev-usb1]
        driver = "usbhid-ups"
        port = "auto"
        vendorid = "2341"
        productid = "8036"
        product = "LattePanda_UPS"
        serial = "6D76279D5088"
        vendor = "DFRobot"

I have ordered a set of 18650 batteries for it, but they haven’t arrived yet–when they do, I will either update this post or link to the update (and hopefully I’ll have sorted out a working case design by then). The plan is to verify charge/discharge rates, check the actual runtime under idle/typical load, and confirm it generates the correct NUT events (on‑battery/low‑battery), since right now all I get is detection and an error reading the battery capacity.

Designing an Enclosure

Of course, if you’re interested in integrating the IOTA into your solutions, you will eventually need to enclose it. STEP files of many LattePanda products are easy to find, so it’s easy to get started.

Stacking the IOTA

There is a little catch, though. The expansion boards available at launch make for a great first impression regarding expandability, but in practice you can’t combine them at random. For instance, I was a bit sad that the IOTA only has one PCIe 3.0 FPC connector, since I’d have liked to use both the SSD and the PoE boards (for the sake of the extra NIC).

Also, if you decide to install the M.2 SSD adapter (like I originally did), neither the PoE nor the UPS boards will fit since the connectors will conflict with the M.2 board–however, you can try to be a little creative with some extra standoffs (and, in the case of the UPS board, extending the power cables).

This will also mean additional care when (re)designing enclosures. As usual with LattePanda, there are STEP files available on GitHub (which were updated at least once since I started writing this) and you will be able to model everything very accurately:

A quick 3D render of the board and cooler models
A quick 3D render of the board and cooler models

Additionally, some of the boards may block or constrain access to parts of the main board, so you may need to get creative with wiring and placement depending on your use case. In particular, I’d recommend planning clearance around some of the connectors around the edge of the board–especially the PCIe FPC cable, which effectively sticks out a bit on the side and shouldn’t be bent at an angle.

I’ve been trying to design a case that also holds the UPS module and have come up against that exact issue:

The IOTA with just the UPS module--note how cramped the connectors are
The IOTA with just the UPS module--note how cramped the connectors are

…so I’ve been pondering placing the UPS module alongside the IOTA, which should allow me to reinstate the NVMe adapter and use it as a full-blown node. I’ll update this post when I figure out a good solution for it–and publish my enclosure design somewhere.

Conclusion

There are dozens, if not hundreds of Intel SBCs on the market now–not just the consumer and hobbyist stuff, but also modern revisions of older industrial PCs that are being given new life with Intel’s Alder Lake N chip, but I don’t think there are many with the historical popularity of the LattePanda, so it’s great that the IOTA was designed as a drop-in replacement for the V1.

If you don’t need PCIe or dual Ethernet, the IOTA is a great pick. And with full x86 support, it’s a breath of fresh air compared to ARM boards with vendor kernels and patchy driver support, not to mention that you get standard UEFI, a complete BIOS and a pretty beefy CPU that might even be overkill for most typical industrial applications (although it will make for a great upgrade if you design point-of-sale devices).

My only complaint is that the modular expansion system could have been a bit more flexible with regard to combining different options, but I understand the design constraints and the IOTA is meant as a starting point for custom solutions, so I expect integrators to go out and design their own expansion boards.

But overall, I think LattePanda has a winner on their hands with the IOTA, and I look forward to seeing what the community does with it. I know what I plan to do with mine…

Reviving a MacBook Air with Fedora Silverblue

Like many people, I have a few older Mac laptops around, and with Apple discontinuing support for older versions of macOS (and, eventually, for Intel machines altogether), it’s long been in my backlog to re-purpose them.

And with my kids now grown up and taking over my to run Linux on them, it was pretty obvious that we’d need more machines for experimentation.

So I started with our old model A1466, which I got a replacement battery for quite a few years ago. I did that to turn it into a travel laptop, and it worked great (and survived a few trips and macOS upgrades) until it became just too slow and outdated for me to work on my personal projects.

Sadly, I pretty much destroyed a MacBook 12” a few years back because its screen stopped working, and it would have been perfect for this…

I did hit a snag right at the start, since I couldn’t find the original charger. But fortunately USB-C to MagSafe adapters are a thing these days, and they have been working out great (I got two, just to be on the safe side).

Fedora Silverblue

I decided to install Fedora Silverblue for a few reasons:

  • It’s been my daily driver on pretty much all my Linux machines (including some VMs) for well over a year now.
  • Fedora’s GNOME experience is completely vanilla, which means I don’t have to fight ’s vagaries.
  • Silverblue’s atomic updates make it pretty much zero maintenance for any use case other than the deepest tinkering, and that’s exactly what I want in a laptop that might well be handed down to non-technical users in the future.

As a case in point, my just upgraded seamlessly from Fedora 42 to 43 without any real intervention on my part, and I’ve had zero issues with previous upgrades in other machines.

Even so, I install most of my tooling via linuxbrew (for consistency with the Mac), and I can add the Microsoft repository and get Microsoft Edge1 and Visual Studio Code rolled in to the OS update mechanism, so that makes even more seamless.

Setting it up

Spoiler: This was completely uneventful.

I booted the Mac, held down Option until I saw the boot options, plugged in my USB drive, and I was off to the races:

Late night setup
Late night setup

After rebooting and running a slightly tweaked version of my ground-init template (which I used to automate setting things up), I was set:

System information in GNOME
System information in GNOME

Stuff That Just Worked

As usual, setting the keyboard to English (Macintosh) lets me type accented characters and all I need with almost identical key combinations as on a Mac, and function keys (brightness, keyboard backlight, media, etc.) just worked, except for Exposé and the app list (which I simply re-bound in GNOME settings):

Keyboard Settings
Keyboard Settings

Other than the irritating tendency to try using Command for copying and pasting because my fingers know they are on a Mac, everything feels perfectly normal.

As to trackpad support GNOME gestures are nearly identical, and switching workspaces, getting a window overview, etc. doesn’t require learning any new habits.

But nothing’s perfect, so this seems like a good point to list the very few caveats I found so far:

Caveats

First off, a disclaimer for anyone landing here at random: since this isn’t a step-by-step guide, fixing some of these issues implies familiarity with Linux and knowing how to enable things like third-party repositories (mostly rpmfusion):

  • The Wi-Fi didn’t work on first boot, so I needed to take a little detour through a USB Ethernet adapter and install broadcom-wl from rpmfusion-nonfree.
  • Even then, the Wi-Fi card is unable to connect to 5GHz Wi-Fi 6 networks like —GNOME will let set up the network, but it simply won’t work, since because according to ArchWiki the BCM4360 802.11ac module doesn’t support WPA3. I just use my 2.4GHz network, which is fine.
  • The (720p) FaceTime HD camera also doesn’t work out of the box. It is listed under lspci as a Broadcom camera device, and you need an additional driver that needs to be packaged to be installable with rpm-ostree. Fortunately there is a COPR repo that did exactly that, and although the GNOME camera app freezes for some reason, both Firefox and Microsoft Edge have no issues.
  • Non-technical Mac users will have to learn that unlocking the disk during boot requires a separate password, and that things like iCloud just aren’t there (although there is a degree of OS integration with Google and Microsoft services as well as NextCloud):

Cloud service integration options
Cloud service integration options

Additional Tweaks

There’s not much else to say–I don’t have the usual qualms of not having application X on Linux (well, except , which in I can sort of replace using Geary), so I won’t get into that.

  • I have, of course, themed GNOME to look very much like a Mac because I really don’t like the Adwaita theme and it’s just faster for me to recognize icons and assorted widgetry–these days I use the MacTahoe GTK Theme, which actually looks better than the real thing.
  • My ground-init template includes a list of GNOME extensions and settings that help tweak the top bar and a few other things to feel more like macOS, as well as some packages and apps I like to have around.
  • Power management works very well, although there is a little fun oddity: If you plug in your charger when the machine is fully powered off, the “Mac” will power on and, instead of playing its little charging jingle and going back to sleep, it will stop at the disk encryption prompt–so it’s more natural to charge it when the OS is booted but asleep.

And since I had swapped the battery a few years ago, it lasts forever.

Not quite as much as Apple Silicon Macs, but on Power Save mode and with the screen brightness set to 40% it lasts me nearly 6 hours while writing, doing light coding, or using it as an RDP client (which it is excellent for).

The only thing I’ve found lacking is CPU power, since the i5 on this Air is a bit long in the tooth–but for a browsing/writing appliance, the excellent screen and keyboard more than make up for it.

Also, this particular model was notorious in its day for getting quite hot on the top left corner of the keyboard, but I’ve only noticed it becoming passably warm so far (although truth be told I haven’t really stressed it).

Conclusion

I’m feeling somewhat lucky here, so if I find the time to tackle the MacBook Pro we have lying around (which has a TouchBar and the infamous butterfly keyboard), I’ll write that up as well.

Appendix

This is what the hardware looks like from the inside, for future reference:

 lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 001 Device 003: ID 05ac:0291 Apple, Inc. Apple Internal Keyboard / Trackpad
Bus 001 Device 006: ID 05ac:828f Apple, Inc. Bluetooth USB Host Controller
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 05ac:8406 Apple, Inc. Internal Memory Card Reader

❯ lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 6000 (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:15.0 DMA controller: Intel Corporation Wildcat Point-LP Serial IO DMA Controller (rev 03)
00:15.4 Serial bus controller: Intel Corporation Wildcat Point-LP Serial IO GSPI Controller #1 (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #1 (rev e3)
00:1c.1 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #2 (rev e3)
00:1c.2 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.4 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #5 (rev e3)
00:1c.5 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #6 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
00:1f.6 Signal processing controller: Intel Corporation Wildcat Point-LP Thermal Management Controller (rev 03)
02:00.0 Multimedia controller: Broadcom Inc. and subsidiaries 720p FaceTime HD Camera
03:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4360 802.11ac Dual Band Wireless Network Adapter (rev 03)
04:00.0 SATA controller: Samsung Electronics Co Ltd S4LN058A01[SSUBX] AHCI SSD Controller (Apple slot) (rev 01)
05:00.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
06:00.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
06:03.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
06:04.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
06:05.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
06:06.0 PCI bridge: Intel Corporation DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013]
07:00.0 System peripheral: Intel Corporation DSL5320 Thunderbolt 2 NHI [Falcon Ridge 2C 2013]

  1. In my experience it’s the lesser evil of all Chromium-based browsers for my particular use case, given that I use OneDrive and the Office web versions pretty intensively. ↩︎

The Week I Built Half a TOTEM

During a few random lulls in work I finally went down the rabbit hole of building myself a custom keyboard. I had ordered most of the parts months ago, but only now got the time to clear out my electronics desk, dust off my hotplate, do a little soldering and begin 3D printing the case and keycaps.

Read More...

26.1

Our worldwide usability nightmare continues, and I have thoughts:

Read More...

Notes for October 13-31

Well, this was a “fun” two weeks. In short, I got blindsided by a large project and a bunch of other work things, including an unusual amount of office visits (almost one a week, which is certainly not the norm these days) and a lot of calls.

Read More...

A Minor Rant About Cloudflare UX

I have, , spent far too much time wandering the chaotic wilds of Cloudflare’s web UI to set up a new tunnelled web application (a trivial proxy to be able to use my as a whiteboard from the Azure Virtual Desktop I live inside of), and to avoid having to go through the whole thing again, I decided to take some notes.

Read More...

Ten Years at Microsoft

It’s been , and I’ve made it a point to mark the occasion (almost) every year, so why stop now?

Read More...

Notes for September 29-October 12

I have been rather too busy hopping from project to project to do anything but read and watching a little TV in the evenings, as well as a bit annoyed by more industry disturbances and .

Read More...

Creating Per-Project MCP Servers

I must confess, first and foremost, that I am not a fan of as a protocol–I find it overly complex (why shunt that much JSON around and waste tokens parsing it?), badly designed for application scenarios (it is completely redundant if you have good Swagger specs for your APIs, not to mention poorly secured) and has generated so much hype that I instinctively shied away until the dust settled.

Read More...

Notes for September 22-28

It was a moderately exciting week work-wise (in a positive way), but a recurrence of the highly disruptive habit people have of booking meetings the very next day or early the day after (even when any sort of effective work would take a day or so to yield finished results) made it hard to, well, do anything at all…

Read More...

Archives3D Site Map