Reboot your Pi often?
Use virtual 'swap' space that is written to your SDHC?
Run a small database on your Pi?
Do any kind of data logging, reading sensors, or serial or network capture? Do you save this data to the SDHC at fairly frequent intervals?
Have a customized Pi with web servers, email servers or other servers that constantly write configuration or temporary files?
If so, please read on....your SDHC may be at risk.
Standard Flash based memories and EEPROM require a block erase before new data is written. These devices also have a limit on how many times these erase cycles can be completed.
- F-RAM requires no 'erase' to write new data (so it is FAST!)
- F-RAM has virtually limitless (100 trillion) write cycles (so it LASTS!)
- F-RAM requires no external battery to retain data (so it is COOL!)
Watch a short speed test
For the advantages and technical details of F-RAM, please take a few moments to watch this video (courtesy of Fujitsu, whose F-RAM parts we will be using in this project)
See the F-RAMDisk in action
The current state of the software can be seen in the following video. A single Linux module adds several different devices to the Raspberry Pi's /dev directory allowing you to access all of the different features.
In the video, you will also see the non-volatile F-RAMDisk in action.
(WARNING: the video is a bit dull during the Raspberry Pi reboot!)
Meet the Ironman Family
There are 3 types of Ironman boards.
Ironman-2 (expandable - additional features)
Ironman-D daughtercard used to expand the Ironman-2 with up to 4MBytes more FRAM.
All boards offer the the same base functionality, with additional features added as they progress.
See the bottom of this page for technical details of each.
The short story?
There are 2 million SDHC cards running in Raspberry Pi's all over the world. Each SDHC is at risk of early failure because the Pi is constantly writing data to the Linux root partition stored on the SDHC. 10,000 writes and your Pi fails to boot, and your data and configuration is lost.
This project will develop an add-on card that will add a 1 to 4 Megabyte non-volatile disk using Ferroelectric RAM that will allow your SDHC to boot read-only, while still allowing Linux to write small databases, log-files, caches, configuration files, temporary files and many others that are changed during normal usage of the Pi; all without using precious kernel and application memory from the built in RAM disk or tmpfs (Plus, the files survive a reboot!).
The longer story.
Ferroelectric RAM (F-RAM) is almost the perfect RAM for embedded systems. It is as fast as SRAM with no erase/write cycles; it is completely non-volatile, requiring NO power or battery backup to retain data for up to 10 years; It has almost limitless read/write cycles unlike Flash and/or EEPROM which limits writes to 100,000 or 10,000 writes before device failure. The only 2 downsides of F-RAM is density/size and cost.
F-RAM can be read and written (a read is also a write) up to 100 trillion times. Big number? Think of it this way. You could write the same byte address to a F-RAM chip 1,000 times per SECOND every second, and the device would not fail for over 317 years. Doing the same thing to Flash memory (with 100,000 lifetime write limit), the device would fail in 100 seconds. (this is certainly not completely accurate due to wear-leveling algorithms that balance the writes to different addresses in Flash, but you can see that writes quickly add up)
How it all started:
The Ironman board started life to add basic functionality and F-RAM to my Raspberry Pi with what I felt was essential to any embedded system that was lacking in the Pi. A real-time clock, some configuration EEPROM, data communications using both RS-232 and RS-485 with advanced UART features, and the ability to have on-board non-volatile storage that would allow the root partition to run as read-only without ever modifying the partition. I also needed a mechanism to identify data that was generated by the Pi so the electronic ID was also added. It was also important that I not lose any of the current GPIO functionality so a full 26 pin GPIO pass-through was added so that I could add additonal modules as necessary.
To make the first prototype, two boards were purchased online. A 'Tiny RTC' board which was modified to replace the on-board I2C EEPROM chip with an I2C F-RAM chip, and placed it all on a 'Humble Pi' board.
Once I was sure the prototype worked correctly, and I could write the prerequisite software, I began designing the first PCB. (Ironman-1)
After successfully working with the original prototype, I decided to modify the original design and add several features that included a full featured I2C UART that supports a very respectable amount of features, including auto-transmitter enable/disable for half-duplex RS485 communications, a configuration DIP switch, an input and some output LEDs to show activity. Additionally, a voltage regulator was added so as to not 'steal' 3.3V power from the Pi's 3.3V rail. The voltage regulator converts from the 5V mini-USB connector down to 3.3V levels at 100ma. Since F-RAM is very low power, 100ma is more than enough to power everything.
While waiting for the next generation Ironman-2 PCBs to arrive, I was still frustrated by the amount of F-RAM that I could include on the board, and the cost. I then came across the Fujitsu MBR85 series of 256Kbyte F-RAM chips using the SPI interface. With some thought, I found that I could easily add 16 of these chips to a 'daughter card' that would work with the existing Ironman-2 base, and allow the user to add as little or much F-RAM (up to 4MB) that his needs or budget would allow. So back to the PCB software, and this is what I came up with (you can see the SPI based 256MByte F-RAM chip used for testing)
After building the first daughter card (Ironman-D) I have decided to replace the 3 8 position DIP switches (used to adjust pin outs of the RS-485 signals on the RJ45 connector) with standard solder jumpers, so please expect that in the final product. I just thought the DIP switches were too large and ugly for the board.
Current State of the Project:
Currently, all of the first and second generation prototypes have been built and tested and software development has begun. Some minor details about the hardware design have been changed, and I am waiting on a few parts to arrive (new smaller battery holder) to make sure everything will fit correctly. Additionally, a few parts have been moved to avoid mechanical contact with Raspberry Pi parts below.
Those final boards should be back to me within 2 weeks.
What still needs to be done:
• Redesign entry level ‘Ironman-1’ board to use surface mount components for low cost and easy manufacturing.
• Finish prototype Ironman-D expandable daughtercard using SPI for high speed F-RAM access. Respin PCB if required.
• Complete Linux/Pi kernel driver for all Ironman functionality (F-RAM block driver, RTC,EEPROM,UART, MAC/EID)
• Develop sample programs/documentation using the F-RAM, RTC,EEPROM,UART,MAC/EID, LEDs and configuration switches.
• Acquire parts and PCB assembly services.
• Do first production run of all 3 boards.
• Create a custom read-only SD card image (based on Raspbian) that can pre-loaded ready to safely run the Pi with the Ironman installed.
• Ship KickStarter rewards to all happy new Ironman owners.
12/21/13 - 1/07/14 - arrival of Ironman-2 PCBs. Build several boards and test all functionality with software. Boards arrived 12/26, have been built and all functionality tested. Voltage regulator pin out in error and must be corrected in final respin. (currently mounted upside down).
1/07/14 - 1/10/14 - re-layout low-cost Ironman-1 board using all SMT parts to make assembly the most efficient and inexpensive. Remove RS485, 2 connectors, and jumpers. Make battery smaller. (Complete!)
1/16/14- Submit Ironman-D daughter boards to have first PCBs fabricated. Order any additional parts needed so they are here when the PCBs arrive. Boards have arrived and have been built. Need to write SPI based software for testing.
1/11/14 - 1/31/14 - finish development on hardware drivers. Get source code posted on GitHub.
2/7/14 - 2/14/14 - Any respins of any boards should be completed by this date.
2/15/14 - 2/28/14 - Have first run assembly of all boards done. Work with vendors to work out trouble spots and/or questions about build. (they have 10 day lead time on 20 boards).
3/1/14 - 3/7/14 - test all assembled boards for proper functionality. Calculate assembly failure rate, find common assembly mistakes and work with assembly house to correct.
3/8/14- 3/15/14 - based on KickStarter demand place initial order for 1st production. Assume 2 weeks lead time.
4/1/14 - begin shipment of first production to first backers as rewards.
Technical Details/Final Product:
One of the goals of this project is to provide useful and unique features to the Raspberry Pi, while still allowing all current RasPi features to still be used. You will still be able to use the SPI bus, the I2C bus, the internal UART and all GPIO pins for whatever additional boards you would like to attach to your Pi. In the case where I used a GPIO pin (UART interrupt), there is a jumper that allows you to disable this connection to the GPIO line. I2C addresses of other devices that might conflict with I2C devices on the Ironman will still need to be taken into account, however, the Ironman-2 is able to remap the I2C chips into two different ranges to help with adding additional devices. For the Ironman-D, the board generates it's own Chip Select values, so as to not conflict the RasPi's onboard SPI_CS0 and SPI_CS1 chip select lines. Additionally, the entire RasPi GPIO header (26 pin) is also brought out to another connector onboard.
All products will contain the following functionality:
1) A real time clock with battery backup. (includes 56 bytes RAM)
2) built in Pi UART TTL to RS-232 conversion
3) 256 bytes configuration EEPROM
4) 128 bit unique electronic identifier
5) True 64 bit EUI-64 MAC address for IPv6
4) All Pi GPIO ports brought out to additional connector so you don't lose any Pi functionality and can add additional boards.
5) Single software driver/kernel module that creates /dev devices for all functionality on the boards. Driver is open-source.
Ironman-1 (hobbyist level)
1) Small size, utilizing only half of the Pi footprint. No GPIO signals are lost.
2) 64KByte F-RAMDisk. (or 128K)
3) Please be aware that the Ironman-1 does not support the Ironman-D daughter card, and 2 cards will not work on the same RPi together.
Ironman-2 (expandable). All 'essential' features, and all features of the Ironman-1, plus:
1) Adds a Maxim 3107 I2C full featured UART driving half duplex RS-485 communication. The UART has automatic control of transmitter enable/disable so no special software is required. MAX3485 transceiver and screw terminals for connecting wiring.
2) Adds 3 LEDs (red, yellow, green) attached to UART GPIO lines.
3) Adds 4 position DIP switch for configuration.
- a) enable RS-485 terminating resistor,
- b) disables RTC (you might want a different one)
- c) change addresses of I2C devices so you can add another Ironman board to double functionality.(twice the fun!)
- d) enable/disable UART's interrupt signal on GPIO 11 (in case you need that GPIO for something else).
4) Breakout pins for I2C signals for various common I2C modules following the 'Adafruit' pin configuration.
5) Adds the ability to add another Ironman-2 board for additional functionality. (2 UARTs, 2 RS485 channels, etc)
6) Can be upgraded by adding Ironman-D daughter card.
High Level Board: Ironman-2 board plus Ironman-D daughter card. All features listed so far (Ironman 1 and 2), plus:
1) holds 256K to 4M byte additional F-RAMDisk using SPI bus. F-RAM banks are bare sockets and you can add chips as required.
2) F-RAMDisk uses SPI serial protocol instead of I2C which increases the read/write speed from 1MHz (I2C) to approximately 24MHz(SPI). Ironman-D generates its own SPI chip select signals so RPi SPI functionality is not lost (CS0 and CS1)
3) Adds RJ-45 connectors to make connecting your Pi to RS485 in multi-drop mode as easy as plugging in a cable.
It takes a lot of time and energy to develop a project like this for any hobbyist. With the increasing number of people using the Raspberry Pi platform for all sorts of high speed data collection and communication, SDHC and USB sticks just couldn't fill the need. I felt this product would be a great addition for anyone looking for an easy, expandable method for capturing real-time data over long periods of time while saving the lifetime of the Pi's SDHC card.
My investment in this project is my time and my experience, and have also spent a considerable amount on PCBs, and electronics.
The Raspberry Pi is generally an open, hobbyist community looking to keep our costs low. By bringing this product to Kickstarter, the power of quantity will kick in (I can get PCBs and components, especially F-RAM, much more inexpensively) and we will be able to offer these devices at much lower cost than would otherwise be possible.
Thank you for your time and interest in this project and I hope you will enjoy the ride! got iron?
Risks and challenges
1) Development time of the software drivers. This is the same for all software and not just this project. Low level drivers can be hard to debug and this can push timelines out. Experience in how to track down issues saves time, and with over 30 years of experience in embedded software development, I have never met a bug that got the better of me. The good news is, is that, at this point, driver software is functional, and only requires optimization and minor rework.
2) Development is a series of 'problem solving'. Some problems are easier to solve than others. This can push out timelines.
3) Production lead-times, cost of parts, and logistics. Lead times can be known up front. Getting the parts from different sources for the best price can be a challenge. The parts to build the initial 2 prototypes which were bought from DigiKey cost almost $80.00. That simply will not be acceptable. I have obtained the parts to build the first 50 versions of the Ironman-2, at much more realistic prices. Hopefully demand for the boards will make these prices go down. I hope to make production as turn-key as possible, and have already contacted vendors for PCB assembly and fab. I have been in contact with Fujitsu and they are advising me to order the F-RAM parts as early as possible as soon as I know the demand. They are quoting lead times of almost 14 weeks. I will make additional chips (for user upgrade) available online after the backer rewards have been shipped.
3) Board respins or hardware bugs. So far, so good. 1st prototype had 0 electrical errors, and one mechanical (spacing of a connector) error. No software bugs were found. The second prototype (Ironman-2) was based on the first schematic, and we will know within a week where we stand.
4) Time. I have a day job. This project is important to me, and I spend nights and weekends working on it. This is my hobby, what I love to do. I won't put my name on a product until it is right.
- (30 days)