Very Simple CircuitPython Driver for Generic 64Mb SPI PSRAM

I really like this PSRAM chip from Adafruit. It behaves very much like SRAM, but with a much higher capacity and an SPI interface, which is so much nicer to deal with than more address lines than I can count. Hauling that much data back and forth with (Circuit/Micro)Python over a microcontroller SPI interface isn’t fast, but having that much capacity at your disposal makes it really useful.

I wrote a MicroPython driver for it a little while ago and have put together a CircuitPython version. I’ve tested it with CircuitPython 6.2, 6.3, and 7.0.0-alpha.3, and it seems to work pretty well.

You can find the driver and an example program for it at:

Very Simple MicroPython Driver For Microchip 24×256 and 24×512 I2C EEPROMs

This is a slightly modified version of the CircuitPython driver I released a couple of days ago. Functionality is all the same but it runs with MicroPython v1.15.

If you’re interested, you can find it here:

So… Firefox.

Firefox has been my browser of choice for over fifteen years now. I’ve repeatedly donated to Mozilla and have enjoyed the security, stability, and “Firefox-ness” of the browser.

Times and technologies change, though, and while Firefox has on occasion irritated me (the change to “Quantum” a few years ago, for example), I think today is the first time that they’ve put out an update that actually strains my eyes. I present to you Firefox 89.0:

Aside from resizing, this image has not been manipulated in any way. Not a lot of contrast there. Here’s a different view:

Note how there’s nothing dividing the tabs and they all just blur together. I routinely have 25+ tabs open in a browser and this update isn’t going to make that any easier. I need glasses for distance and close work, but not for computer work, and I find this new UI hard on my eyes. I wonder how the changes will impact people with impaired vision.

Fortunately, Mozilla/Firefox has a way to submit feedback about their product so I thought I’d leave my thoughts about the new design:


Considering that they just released a new version, I’m guessing that “We’ve paused submissions to this form so that we can improve how we collect feedback” actually means “We’re being buried under an avalanche of comments and can’t keep up”.

I understand (and agree) that things need to evolve. After all, we’ve come a long way from this (which, interestingly, is ALSO all grey but makes my eyes ache less and I find it a lot easier to pick things out from the menus and bars):

Picture of NCSA Mosaic web browser from the 1990s.
Full disclosure: Mosaic KICKED ASS back in the day. Way better than Gopher and Archie. Seriously.

But I think the Firefox developers dropped the ball on version 89.0. Hopefully the next update will bring some contrast, or at least menu options so folks like me can tweak some UI settings and make it a bit easier on our aging eyeballs.

Very Simple CircuitPython Driver For Microchip 24×256 and 24×512 I2C EEPROMs

Took me a while to get this one working. CircuitPython is juuuuuuuust different enough from MicroPython to be… well… pretty infuriating at times.

Do you know what I2C looks like on an oscilloscope? I didn’t until today, when I spent a long time looking at stuff like this:

I pay extra to get “comfortably rounded” square waves.
One, zero, one, zero, one, zero, zero, ze… DAMMIT

Anyway, if you’re interested, you can find the driver here:

Very Simple MicroPython Driver For Microchip 47×16 I2C EERAM

Up until a short while ago, I’d never heard of EERAM. When I saw it, I initially thought it was a typo, but after looking into it I was pretty intrigued.

Turns out it’s SRAM and EEPROM packaged in the same device, and you get the benefits of both. During regular operation, you read and write to the SRAM, which means it’s nice and quick and has unlimited write cycles. If power is lost (and you have the right capacitor connected to the Vcap pin), the contents of the SRAM are automatically written to the EEPROM. When power is restored, the contents of EEPROM are automatically read into SRAM.

You can’t use the EEPROM directly, but you can trigger the device to store the SRAM data to the EEPROM with a command or pin, and you can recall the EEPROM data to the SRAM with a command.

It’s kind of strange but neat at the same time. Oh, and it shows up as two devices on the I2C bus! Weird, eh?

I put together a little MicroPython driver that sets the device to auto store in the event of power failure (so you’ll need that capacitor), and added functions to manually store SRAM to EEPROM and recall EEPROM to SRAM. If you’re interested, you can find it at: