Bit-Banged Ethernet On The Raspberry Pi Pico

Whilst the Raspberry Pi RP2040 is quite a capable little chip, on the whole it’s nothing really special compared to the big brand offerings. But, the PIO peripheral is a bit special, and its inclusion was clearly a masterstroke of foresight, because it has bestowed the platform all kinds of capabilities that would be really hard to do any other way, especially for the price.

Our focus this time is on Ethernet, utilizing the PIO as a simple serialiser to push out a pre-formatted bitstream. [kingyo] so far has managed to implement the Pico-10BASE-T providing the bare minimum of UDP transmission (GitHub project) using only a handful of resistors as a proof of concept. For a safer implementation it is more usual to couple such a thing magnetically, and [kingyo] does show construction of a rudimentary pulse transformer, although off the shelf parts are obviously available for this. For the sake of completeness, it is also possible to capacitively couple Ethernet hardware (checkout this Micrel app note for starters) but it isn’t done all that much in practice.

Inside the expedient pulse transformer.

UDP is a simple Ethernet protocol for transferring application data. Being connection-less, payload data are simply formatted into a packet buffer up front. This is all fine, until you realize that the packets are pretty long and the bitrate can be quite high for a low-cost uC, which is why devices with dedicated Ethernet MAC functionality have a specific hardware serialiser-deserialiser (SERDES) block just for this function.

Like many small uC devices, the RP2040 does not have a MAC function built in, but it does have the PIO, and that can easily be programmed to perform the SERDES function in only a handful of lines of code, albeit only currently operating at 10 MBit/sec. This will cause some connectivity problems for modern switch hardware, as they will likely no longer support this low speed, but that’s easily solved by snagging some older switch hardware off eBay.

As for the UDP receive, that is promised for the future, but for getting data out of a remote device over a wired network, Pico-10BASE-T is a pretty good starting point. We’ve seen a few projects before that utilize the PIO to generate high speed signals, such as DVI, albeit with a heavy dose of overclocking needed. If you want a bit more of an intro to all things Pico, you could do worse than check out this video series we highlighted a while back.

The Rollercoaster Of Developing The Ultimate Hackable Keyboard

When designing anything with “hackable” in the punchline, scope creep is an integral part of the process. You end up trying to create something to potentially be an infinite number of things for an infinite number of users. [Zack Freedman] is going really deep down the rabbit hole with his MiRage keyboard and has been documenting the progress in his usual entertaining style, with some cautionary notes included.

The most fascinating tale from this come about as a result of adding RGB LEDs beneath the keys, while still allowing everything to function when the keyboard is split in two. Thanks to an IO expander chip in one side of the board, a standard TRRS audio cable is enough to link both sides together. But the addition of addressable LEDs meant more lines were required.

[Zack] thought he had found a solution in the form of SATA cables, but it turns out all SATA cables internally connect pins 1,3, and 7, making them useless for this application. He realized he had no choice but to add a second microcontroller to the “dumb” side of the keyboard and return to I2C over a TRRS cable. However, the RP2040-based Seeed XIAO’s I2C absolutely refused to play along. After a fortnight of frustrating debugging, it turns out there was a bug in the pin definitions. Fortunately, this also revealed that the XIAO had an undocumented secondary I2C interface, which he plans to configure as a peripheral to make the keyboard almost infinitely expandable with additional keys.

An earlier version of the MiRage featured tactile OLED displays, but it turns out the thin panes of glass don’t handle repeated flexing well, so they had to be scrapped. In their place came a touchscreen E-paper display, but now this seems to be evolving into a pluggable module for any input device that your heart desires, including possibly a haptic SmartKnob. Another major update are PCB footprints that support both CHOC and MX switches.

It all started with the MiRage V1 keyboard intended to for use in an updated version of [Zack]’s cyberdeck. After realizing how many people were interested in the keyboard but not the cyberdeck, he shifted focus to refining the MiRage.

This project still has some way to go, so we’ll certainly be keeping our eye on it. In the meantime, we’ve recently covered another exceptionally customizable keyboard that might catch your fancy.

Continue reading “The Rollercoaster Of Developing The Ultimate Hackable Keyboard”

Part of a picture showing all kinds of different CAN devices in a car

CAN Peripheral For RP2040, Courtesy Of PIO

[Kevin O’Connor] writes to us about his project, can2040adding CAN support to the RP2040. The RP2040 doesn’t have a CAN peripheral, but [Kevin] wrote code for the RP2040’s PIO engine that can receive and send CAN packets. Now we can all benefit from his work by using this openly available CAN driver. This library is written in C, so it’s a good fit for the lower-level hackers among us, and in all likelihood, it wouldn’t be hard to make a MicroPython wrapper around it.

The CAN bus needs a peripheral for the messages to be handled properly, and people have been using external chips for this purpose until now. These chips, [Kevin] tells us, have lately been unavailable due to the chip shortage, making this project more valuable. The documentation is extensive and accessible, and [Kevin] details how to best use this driver. With such a tool in hand, you can now turn your Pico into a CAN tinkering toolkit, or wire up some CAN devices for use in your own projects!

[Kevin] says this code is already being used in Klipper, a framework powering 3D printers and other machines like them. As for your own purposes, you can absolutely use such a CAN tool to hack on your car – here’s a treasure trove of car hacking documentation, by the way! Thanks to the PIO engine, there seems to be no end to the RP2040’s versatility – you can even drive HDMI monitor with this PIO-based DVI code.

Continue reading “CAN Peripheral For RP2040, Courtesy Of PIO”

Badges Of 2022: BornHack

While the rest of the world’s hacker camps shut their doors through the pandemic there was one which managed through a combination of careful planning and strict observation of social distancing to keep going. The Danish hacker community gather every August for BornHack, a small and laid-back event in a forest on the isle of Fyn that has us coming back for more every year. They always have an interesting badge thanks to the designs of [Thomas Flummer], and this year looks to be no exception as they’ve dropped some details of the upcoming badge.

In short, it’s a beautifully designed hand-held games console with a colour screen, powered by the ubiquitous-in-the-chip-shortage RP2040 microcontroller. On board are the usual interfaces and a prototyping area plus CircuitPython for easy coding, and we expect it to sprout some addictive and playable gaming action. It’s the sort of PCB that we could imagine coming as a product from the likes of Pimoroni, but for now the only way to get your hands on one is to go to the event. We’ll being you a review when we have one. Meanwhile you can take a look at a previous year’s badge.

Raspberry Pi Pico W Adds Wireless

News just in from the folks at Raspberry Pi: the newest version of their Pico has WiFi and is called, obviously, the Pico W. We were going to get our hands on a sample unit and kick its tires, but it’s stuck in customs. Boo! So until it shows up, here’s what we can glean from the press releases and documentation.

The Pico is, of course, the Raspberry Pi microcontroller dev board based on their RP2040 microcontroller. This in turn has two Cortex M0+ cores and a good chunk of onboard RAM, which has made it a popular target for MicroPython. They had some extra real estate on the PCB, so they’ve added an Infineon CYW43439 WiFi chip, and voila: Pico W.

As of now, the WiFi is supported in both the C SDK and the pre-baked MicroPython image. It looks trivially easy to get it working, and it’s based on the time-tested lwIP stack, a classic in the embedded world. The CYW43439 is also Bluetooth capable, but there’s no firmware support for that yet, but we wouldn’t be surprised if it showed up soon.

The price? $6 for the whole shooting match. You can view this two ways: a small $2 premium over the old Pico, or a price increase of 50%. How you see things probably depends on your order quantity. Either way, it’s firmly in the ESP32 module price range, so you’ve got some comparison shopping to do if your project needs a microcontroller and WiFi. And in these days of silicon shortages, it’s nice to have a couple of options.

What Do You Get When A Raspberry Pi Pico Flashes A Nintendo 64

The joke was when the Nintendo 64 first hit the streets around a quarter century ago, that the 64 in the name referred not to the technology on board, but to the excessive cost of the cartridges. Whatever the truth in that, it’s something now completely laid to rest by [Konrad Beckmann] with his Nintendo 64 flash cart powered by a Raspberry Pi Pico (Nitter Link).

The schematic is surprisingly simple, in that the Pico does everything required to both interface to the N64 and to an SD card to hold the software. The clever work is done by the RP2040 firmware, which can be found along with the hardware details in the “develop” branch of the project’s GitHub repository. And while the earliest version was a Raspberry Pi Pico with a host of jumper wires, the more polished version focuses on a custom PCB and bare RP2040 chip.

Perhaps the N64 hasn’t received the attention it should have over the years, overshadowed as it was by its competitors such as the original PlayStation, but it’s projects like this one which remind us that there’s still life in Nintendo’s ’90s flagship. Speaking of which, if you were on Team Sony back in the day but still want to put your Pi Pico to use, check out this DIY PlayStation Memory Card we covered recently.

A Simple RP2040-Based Audio DSP Board

If you’re one of those people who got into building electronics for the purpose of making music, then this Raspberry Pi RP2040-based audio DSP project by [DatanoiseTV] might be of interest. Provided is a FreeRTOS template application for creating Eurorack compatible synthesizers, effects processors, and similar DSP-based audio widgets.

The hardware platform has the usual Eurorack connectivity, including MIDI in, Control Voltages (CV) and the usual 5V-compatible triggers. An audio output is provided to send the audio out to the system mixer or any other analog modules. Additionally, connections are provided for a rotary encoder, a few push buttons, and an OLED display to allow construction of a rudimentary user interface on the module, if that is required.

The application template is generic enough, however the project is intended to be used with the Vult DSP transcompiler. Vult is a high-level programming language designed to enable easy creation of audio synthesizers and similar, producing C++ code as an output of the compilation process. This is then wrapped up with the RTOS goodies (although you don’t actually need them) to drop onto the RP2040 in the usual way, via the handy USB-C port. So, if you’re looking to get into DSP-based Eurorack modules for your homebrew synth rack, this might be a good place to start.

Just like the RP2040 isn’t the most obvious choice for a DSP application, neither is the ESP32 for that matter, but who cares? many modern micros are more than capable of audio DSP these days, with or without the dedicated functionality.