Last week my father was cleaning out some old boxes and came across a few dozen old floppy disks. These were all in sky blue sleeves with rainbow labels that said “Konica PC PictureShow”. The disks were still in great condition, so I thought it would be fun to see what was on these photo time capsules from yesteryear.
Every few months SparkFun does what they call a “Dumpster Dive”. In the course of doing business they amass a collection of excess electronics, ranging from “one-off items, to items that are a little broken or ugly, to items that aren’t worth individually listing and selling.” Rather than recycling these still-useful electronics, they decided to put together little 1 lb. grab-bag boxes to sell.
And I decided to buy one.
A few months ago I was attempting to reformat my laptop as a dual-boot machine with both Ubuntu and Windows 10 and I was having issues getting the boot manager to properly detect both operating systems. Shortly after changing a setting in the BIOS related to SATA operation, the laptop suddenly stopped working after rebooting. Powering it on resulted only in a pure black screen where after approximately fifteen seconds it flashed “Lenovo Misto Ontario”, and then nothing. It was true and thoroughly “bricked”.
I tried everything I knew to fix it, including pulling the CMOS battery, reformatting the hard drive, and trying to ‘auto-flash’ the BIOS from a USB drive – nothing worked. I’ve had this little Lenovo S205 netbook for a few years and although it’s gotten slower it’s always served me well. And since it was working perfectly fine up until it er, wasn’t… it seemed like a waste to just throw it out without trying my best to fix it.
I’m happy to say that I succeeded. The solution was to reflash the BIOS chip with a replacement BIOS I found online, using an open source program called ‘flashrom’ and an Arduino acting as an SPI flash programmer. Here’s how I fixed it.
One of my recent projects has been trying to modify some microcontrollers to function as XInput devices, emulating an Xbox controller. The first step in this process is to fetch and then break down the device’s “USB descriptors”. These descriptors are a hierarchy of standardized reports that describe features of the device including who makes it, what version of USB it supports, how it’s powered, and more. By copying the Xbox controller’s descriptors onto my own device, I can convince the computer that my device is also an Xbox controller and will behave like one, and therefore use the Xbox controller’s driver to easily interface with games.
But rather than just copying and pasting the descriptor from one place to another, I want to try and understand exactly what’s going on behind the scenes. I want to understand how the information in these descriptors translates into features of the device’s behavior.
I’m slowly working on an embedded library that emulates an Xbox 360 controller, and one of the features I wanted to add is LED animation support that mimics the “ring” LEDs on the original controller. The first step of this is determining what animations exist and then measuring the timing intervals for each LED.
Multicolor LED strips generally come in two flavors – solid color and addressable. Solid color strips, as the name implies, have all of their LEDs display the same color. Addressable strips on the other hand allow you to control the color value of every individual LED in the strip. The most popular individually-addressable LEDs on the market at the moment are Adafruit Industries’ NeoPixels, based on the WS2182 chipset. They come in a variety of physical packages including strips, rings, and matrices.
Before we can start making patterns with our shiny new NeoPixel prototyping board, we must first understand how to structure color information in a format the Arduino can interpret.