Reverse Engineering Apple’s Mikey Chip

On the old iPods, generally referred to here in the future as iPod Classic, there lives a tiny, undocumented chip called Mikey. It sits at the headphone output and performs only two functions: powering the Apple wired headset microphone and handling button presses from the three buttons. Despite these headphones and iPods having existed for nearly two decades, no one in the open source community has figured out the protocol Apple used for these buttons until now.

As [Hemant] discovered after finding a single archived blog post from 16 years ago about it, the chip is relatively simple by modern standards. Besides handling microphone bias, it sits on an I2C bus and monitors presses from the three buttons on the headset. Each button has its own resistive load, so a press from any of them drops the voltage on the line to a certain amount which the chip can read. The more involved part is a “chirp” that’s a sort of handshake between headset and iPod, which took a bit of work with a debugger that [Hemant] built into a custom Rockbox firmware.

With the chirp sorted out, [Hemant] built the feature into an existing version of Rockbox, and submitted the update to the Rockbox team for integration in future official builds. It’s a long overdue feature for those still using wired headphones and iPods from the turn of the century, but welcome. Some of those iPods are still working to this day, but only conditionally if they’re very cold.

When The Debugger Lies With Stale Cache Values

In a recent blog post by [Daniel Mangum] he goes over a scenario observed while debugging the Cortex-M33-based nRF54LM20, reading and writing values while running through a few scenarios. After initially it seemed to go seemingly without any issues, suddenly the GDB debugger would happily return values that suggested that a previous operation had not succeeded. Or, as the case turned out to be, stale cached values were being returned.

What follows is a very technical and low-level breakdown of how this MCU functions inside, especially its cryptographic features and Key Management Unit, which is used for storing sensitive information. The most amusing part is probably you can bypass the cached data by explicitly specifying the access port and memory address along with other parameters.

This ReadMemAP command supported by the JLinkGDBServer used here showed the right value, whereas the normal GDB read command using x kept returning the cached values. This raised the question of which cache was doing this. The direct read from the AHB-AP access port worked fine, so the suspicion is that the J-Link software’s own caching, with a run without the J-Link caching indeed working fine.

J-Link has had some hardware-related issues too, with this new issue pointing to an awkward software bug that could be table-flip-and-rage-quit worthy depending on how much time it wastes during a debug session. Fortunately [Daniel] seems to have caught this one quickly and had an easy way to bypass it, but we aren’t all that lucky.

 

Basically, Galvanizing Metal Without Acid

As useful as steel and iron are to the modern world, their tendency to rust is a major downside. There’s a spectrum of ways to prevent it, from quickly slapping on a coat of paint on the easy side to alloying, chromizing, or physical vapor deposition at the extremely difficult or industrial-only end. For a middle ground accessible to the home shop, galvanizing is a go-to method of rust prevention that deposits a layer of zinc onto the metal instead, but even this generally involves the use of strong acids. This method, though, makes galvanizing accessible without any acids. (Spoiler alert: substitute strong bases.)

Although the acids are omitted, the solution is caustic, so similar safety measures are still advised. The first step in the process is to dissolve sodium hydroxide into a container of distilled water. Metallic zinc can then be dissolved in the solution, with a bit of sugar and liquid soap to improve the finished quality of the coating. An electric current is applied to the solution, using a graphite plate at the anode and the part to be electroplated as the cathode. After some time, the part will be uniformly coated in a layer of zinc, which can then be brightened in a solution of only-mildly-acidic citric acid if needed.

One of the benefits of using a strong base to galvanize a metal part, beyond the preference of avoiding strong acids, is that this process can be better at plating parts that are non-uniform in shape, so things with deep crevices or other odd shapes that might coat unevenly in acid. If there’s a preference for electroplating with acid, there are some ways of producing one’s own using various methods.

Continue reading “Basically, Galvanizing Metal Without Acid” →

A Modular Macro Keypad

The introduction of the ATmega32U4 microcontroller, with its integrated USB controller, made a lot of hardware tasks much simpler than they were before. One of the arenas it revolutionized was custom keyboards, making it much easier to build not only standard mechanical keyboards, but keyboards of all kinds of shapes and layouts and custom macro keyboards as well. This trend has continued on for the better part of the past decade with other microcontrollers beyond the 32U4 now available as well, but this modular macro keypad takes it to a new level by keeping that simplicity but also keeping costs down.

The suutari20, as it is called by its creator [Squalius] is able to achieve these aims by using 3.5 mm jacks commonly found in audio equipment. Each jack can support up to three keys, with the hub ultimately able to support 18 different keys. Those can include analog devices as well, such as volume knobs or jog controllers. The macro pad is powered by an RP2040 microcontroller from a Raspberry Pi Pico and uses QMK firmware, so those already familiar with custom keyboard programming will have no problem getting started.

From there, all that’s needed is a case, in this example a 3D printed one, and the commodity audio hardware to plug everything in to. It enables whatever functions can be thought of in a macro pad, and although the design focuses on simplicity and cost, this macro pad takes the concept to the extreme with modular keys that each have their own microcontroller built-in.

Continue reading “A Modular Macro Keypad” →

A grid of screenshots of various applications on the CYD PDA

Cheap Yellow Display Dreams Of PDA

Everybody loves the Cheap Yellow Display (CYD) ESP32 dev boards, so why not treat yours to a little PDA? That’s right: turn it into a Portable Digital Assistant and relive the glory days of Palm with this project from [sau412].

For those readers who are too young to remember, a PDA was basically a phoneless and cameraless smart-phone, and devices running Palm Corporation’s Palm OS ruled the roost for most of the 90s and early 2000s. [sau412] hasn’t written an emulator or port of Palm OS; rather he’s created his own firmware for the ESP32-based CYD that is inspired by the PDAs of yore, and has many features you’d have expected back in the day. That includes a Gopher browser, to let you check out the undying alternative to the World Wide Web. There isn’t a general-purpose web browser, but there are RSS and Wikipedia readers, and what else do you need? At least you won’t end up doomscrolling.

There are also a passel of games and a BASIC interpreter, and the usual practical things like a calendar, calculator and contact list. Everything from ebook readers to translators, all of it by [sau421]. If you’ve got a CYD kicking around, you could do worse than give it a little PDA. Using the web-based flasher, we had it up and running in five minutes or so, but without an SD card we couldn’t test all the apps.

This is hardly the first ESP32 PDA  that we’ve featured, but leaning into the CYD means it’s the simplest project to replicate.  If you’re jonesing for the original Palm OS experience on more modern hardware, Pumpkin OS can get you going on x86 or ARM.

 

Self-Repairing Conductive Material From Liquid Metal

PCB circuits are cool, but you know what is cooler? Terminator circuits that’s what! And what if the same material that makes Terminator circuits could also be used for smart heat sinks, flexible circuits, and self-healing material properties? Well, that is exactly what the lab at Virginia Tech’s VT MADE Lab has created, presented by Joel from [3DPrintingNerd].

Continue reading “Self-Repairing Conductive Material From Liquid Metal” →

A Pocket-Sized Digital Fish Tank

The problem with trying to make a fish tank fit in your pocket is that you’ll either end up with water everywhere or a bunch of dead fish. Perhaps that’s why [StratoBuilds] pursued a digital solution instead.

The concept behind Pocket Tank is relatively simple—it’s a small device that displays a virtual tank with a bunch of little fish swimming around inside. It’s based on the Waveshare ESP32-S3-Touch-AMOLED-1.8, which, if you’re wondering, is an ESP32-S3 with a 1.8″ screen attached, all wrapped up in a convenient plastic housing.

Thanks to the powerful microcontroller, there’s plenty of grunt on tap to run and display a small simulated fish tank. [StratoBuilds] whipped up a system wherein fish movement and animations are handled by regular code running at 25-30 fps, while the fish’s decision making is handled by a custom large language model that was condensed down to run on the ESP32 itself. As the fish swim around the tank, the situation is observed by the LLM and the fish’s current goals are changed accordingly depending on what’s going on. Much like a Tamogotchi, there are regular maintenance tasks for the user to handle, too, like cleaning the tank and feeding the fish to keep them alive.

The blog post and YouTube video do a great job of explaining the project; files are on GitHub for those that wish to tinker more directly. It’s funny, because when we normally look at fish tanks, we’re talking about real ones.

Continue reading “A Pocket-Sized Digital Fish Tank” →