---+ Cryo board Firmware Releases
This page contains current and historical firmware (and associated software) releases for the cryo board.
- Cryo board Firmware Releases
- Preparing an SD card for the first time
- Upgrade Instructions
- Current Releases
- Jan. 23, 2013
- Nov. 7, 2011
- Aug. 9, 2011
- Mar. 10, 2011
- Mar. 8, 2011
- Mar. 7, 2011
- Jan. 24, 2011
- Dec. 16, 2010
- Nov. 9, 2010
- Nov. 1, 2010
- March 18, 2010
- February 8, 2010
- December 11, 2009
- October 13, 2009
- October 6, 2009 (release 3, for Chicago)
- October 6, 2009 (release 2)
- October 6, 2009
- October 5, 2009
- September 30, 2009
- September 1, 2009
- August 28, 2009
Preparing an SD card for the first time
You may regret this: Be very sure you use the correct device file in the following instructions. According to your kernel, the SD card and your hard disk aren't terribly different. If you perform these steps on the wrong device file (say, your hard drive), you will have a repartitioned, formatted, completely empty hard disk once you're done.
$ sudo umount /dev/sdcard
$ sudo fdisk /dev/sdcard
In the fdisk session, do the following:
- "p" to view the existing partitions. You will probably see a single "W95 FAT32" partition. When you're convinced this is actually your SD card, type
- "d" to delete the partition(s).
- "n" to create a new partition
- "p" for primary
- "1" for the first primary partition
- return (default setting) for the start block
- return (default setting) for the end block
- "w" to write the partition table
Now eject the partitioned card:
$ sudo eject /dev/sdcard
Remove and re-insert it so Linux recognizes the new partitions. We now need to create a filesystem on the first partition. (Note the
1
following the sdcard device name, indicating the first partition instead of the entire device.)
$ sudo mkfs -t ext2 /dev/sdcard1
Your card is now bank and ready for a root filesystem.
Upgrade Instructions
- Download/flash the bitstream
- to do this with an already booted board, proceed as follows:
- get the bitstream.bin file onto the board (e.g. via netcat, or by copying it onto the MicroSD card prior to booting)
- md5sum the .bin file you downloaded and the one on the board. Make sure their checksums match.
- on the board,
flashcp /path/to/bitstream.bin /dev/mtd0
. Do not interrupt this process or power off the board until it's complete.
- Insert the MicroSD card into your PC
- mount it (the SD card may mount automatically when plugged in)
- clean out the old card contents (unless it's freshly formatted)
- Update the root filesystem
- cd /path/to/sdcard
- sudo tar xzvf /path/to/filesystem.tar.gz
- Update the Kernel image
- copy the kernel image to /path/to/sdcard/simpleImage.cryo.ub
- Make sure it's safe to remove the MicroSD card from your PC
- unmount/eject the SD card
Current Releases
Jan. 23, 2013
Bug fixes:
system.bin |
Bitstream (for Linux upgrade using flashcp) |
14eada0dcd58da2a2e8c4b77018bca57 |
system.mcs |
Bitstream (for bare-board programming) |
4ce55766f8feb1016426f9142a696c8c |
system.cfi |
CFI file required by newer versions of the iMPACT xilinx software |
=ff0166decb9f9bdd45dd412916baed51 |
Nov. 7, 2011
The biggest change in this release is the "trim" API, for calibration of heater and sensor ADCs and DACs. There are the following new calls:
- (load/get/set/save)_heater_dac_trim
- (load/get/set/save)_sensor_dac_trim
- (load/get/set/save)_sensor_adc_voltage_trim
- (load/get/set/save)_sensor_adc_current_trim
The "get" and "set" calls correspond to hardware registers, and take their input from Python. The "load" and "save" methods move offsets between hardware registers and the active configuration database. Since this database (which also stores sensor names, et cetera) lives in /tmp, you must also use commit_active_database() after the save() calls to make your changes persist after a reboot.
Bug fixes:
- Heater offsets (hockeystick corrections) are now managed in hardware, with the trim API mentioned above.
- Clears up "nan.0" JSON formatting bugs when resistances are infinite
Software changes:
- Move to a mmap-based interface, which is faster
- get_samples() moves from (slow) floats to (fast) integers
- Python and Lua now run on the board, with tuber interfaces
Web Interface:
- Timestamps are now shown
- Graceful "reload" handling
Hardware:
- Heater and sensor signals' slew and drive are reduced for improved noise performance.
filesystem.tar.gz |
Filesystem image |
b13aa579ba9dc558728cb3d07e9b4d5f |
system.bin |
Bitstream (for Linux upgrade using flashcp) |
53f91e1933370437f7b043e9538178d7 |
system.mcs |
Bitstream (for bare-board programming) |
854483ff4acccb92717c7425230c128b |
simpleImage.cryo.ub |
Kernel image |
01984f8c288590cb4fd5744df9e72aa0 |
Aug. 9, 2011
This is a major upgrade of several portions of the design.
VHDL: Heavily restructured.
- Uses separate multipliers and state machines for DAC and ADC signal paths.
- DAC -> ADC timing unified for different channels, in an attempt to remove variability in each channel's transfer function
- Added square-wave mixer support
- Added separate "tare" registers for all 32 ADC channels (voltage and current for 16 channels)
On-board Software:
- Moves to up-to-date "tuber" infrastructure, shared with DAN build
- Web interface upgraded to recent JQuery
- Python is now present, but not fully integrated.
- Multicast (both on-board and off-board) now really work properly.
Off-board software:
- The parser is now an honest-to-goodness C implementation. The python implementation was a stopgap.
- The off-board Python API has changed slightly. Highlights/lowlights:
- constants (crython.SOME_CONSTANT) should now be cb.SOME_CONSTANT, where cb is a CryoBoard.
- get_samples is now an on-board method, returning a dictionary rather than a class.
- I know this is a pain, but it's a necessary evil that won't happen very often. The result is many fewer moving pieces that can break in sneaky ways.
Performance:
- The ADC now operates internally at 7.5 ksps, not 30 ksps. This has no external changes (firmware still samples at 400 Hz, and streams at 25 Hz), but it lowers the noise floor.
- The ADC also autocalibrates on boot-up. This doesn't fully correct for offsets within the circuit, but it does tidy up the ADC's calibration a little bit.
Caveats:
- This is a big upgrade, and testing is ongoing.
Link |
Description |
md5sum |
filesystem.tar.gz |
Filesystem image |
946f327b0fc6d61ab3f64051bab1bf030dd069422465b10de9b0fdad4217831259f9a2c2229a1fe5fcf80d46c06a1a1cea3a874c49c2167f33f653d4832f2fd456a5f68bb8af27574ed960c74e2bfee8 |
libcrython.tar.gz |
Crython |
71e656477b7b7dfa1748ba37d106544e |
system.bin |
Bitstream (for Linux upgrade using flashcp) |
a3a80c67fa9b6750a43980753784ee2fffe438fe0f66714388370b966268978c 1c543fb50d675ab5a75230cc47154c40 |
system.mcs |
Bitstream (for bare-board programming) |
=d8f17860f5450d1af7c15c927b3dac9d==50a071e776a409495c54ad4169b3ca8e= =7990386eb9e53fb14424c696cd47e07d= |
simpleImage.cryo.ub |
Kernel image |
63ed92c3255943fd9493068ae51adefd7a2bc716596815e3dacc67257fafebea4414a6ab7130f28334ae7b0a54d232fa |
Mar. 10, 2011
Minor bug fixes.
- Crython now complains if Python isn't version 2.6, instead of relying on the module loader to emit a (probably cryptic) error message
- The streamer web interface now allows streamers to be killed in Firefox (was a JavaScript incompatibility.)
- I do most of my development in Chrome, so that's the least likely way to encounter this kind of bug.
Mar. 8, 2011
Several updates:
- Firmware no longer keeps CryoStreamer objects around. This prevents the board's 4 "server" processes (that respond to method requests, both from Python and via the web interface) from interfering with each other when several are competing for the same streamer samples. This will be revisited when multicast support is added, and multiple copies of the same data can safely be retrieved from the same streamer.
- Enables the optional TX and RX ping-pong buffers in the Ethernet MAC (xps_ethernetlite). This improves performance but makes simpleImage/bitstream files incompatible with previous releases.
- A rare streamer crash is also repaired.
Mar. 7, 2011
This release upgrades the embedded webserver from lighttpd 1.4.26 to 1.4.28, which appears to fix socket lock-ups with more than 4 simultaneous interactive sessions.
Jan. 24, 2011
Happy new year!
This release has a bunch of goodies in it:
- Hardware CIC -> FIR chain
- Hardware timestamp support for IRIG and EBEX Timesync timestamps
- Numerous bug fixes
The streamer is not backward compatible with earlier releases. (This won't happen very often.) Please ensure your crython library is up-to-date.
If you have a cryo board with an older firmware release, you may upgrade it without a JTAG programmer as follows:
- copy the .bin bitstream to your MicroSD card (we'll call this file bitstream.bin)
- eject the MicroSD card from your PC; insert it into your cryo board
- boot up the board
- telnet into your board (username "root" / no password)
- double-check that the bitstream.bin file is the right size and shape
- we suggest running
md5sum /bitstream.bin
and ensuring this matches the md5sum of the firmware file on the wiki
- run
flashcp /bitstream.bin /dev/mtd0
- leave your board powered on until this command completes, otherwise you can brick your board. This will take several minutes.
If you brick your board, you will have to either ship it back to McGill for flashing or track down a JTAG programmer yourself. Please be careful!
Dec. 16, 2010
This release contains a number of bugfixes and additions:
New:
- Serial number support (via on-board jumpers)
- Heater DAC offset support
- "Database commit" support
- Heater ADC support
Bugfixes:
- Fixes an occasional boot hang-up when enabling the ADC buffer
Nov. 9, 2010
This release includes a bugfix and super-cool, whiz-bang docstrings support under Python.
Nov. 1, 2010
This is the first firmware release for the Spartan-6 cryo board. It is, of course, completely incompatible with the rev0 (FX12, PowerPC) firmware.
March 18, 2010
Previous releases have mounted the MicroSD card for reading and writing. This is unfortunately an unstable approach, since the filesystem can undergo slight corruption at each power-off.
In addition, the first libstreamer release (Feb. 8, 2010) included several memory leaks that eventually consume all the board's memory.
Updates:
- Fixes memory leaks in on-board libstreamer
- Make MicroSD filesystem read-only on boot
Instructions to be performed on your MicroSD card:
- Patch
/etc/init.d/inittab
: change null::sysinit:/bin/mount -o remount,rw,noatime /
to null::sysinit:/bin/mount -o remount,ro /
- Update
/home/crython/libstreamer/libstreamer.so
with this file (rename it libstreamer.so
)
- Unmount (do not eject) your MicroSD card and run a complete
fsck.ext3
( sudo /sbin/fsck.ext3 /path/to/devfile
)
- If this check encounters problems, you may wish to rebuild your filesystem before proceeding.
February 8, 2010
Updates:
- Timestamp support
- Packets are now stamped with UNIX timestamps
- Support is integrated into Python library
- Limited configuration interface via web browser
- Housekeeping voltage and thermometry readout
- Heater ADC support
The Python interface now makes use of a C-language library,
libstreamer
, that must be compiled for the streamer to work. The source code for
libstreamer
is included in the Crython repository. To build it, please install Python headers (e.g. Debian's
python2.5-dev
package) and run "make" from the crython repo.
December 11, 2009
Updates
- This is a wrap-up release. Timestamp integration on the Virtex-4 board is a bust, and schematic entry is underway on the Spartan-6 board revision.
October 13, 2009
Updates:
- Calibration files may now be uploaded (but aren't persistent!)
- Unit conversions correct for AC
- Units now default to microamps in manual control page
October 6, 2009 (release 3, for Chicago)
- Many crython and webpage fixes
Known issues:
- Timestamps are not encoded in packets
- Calibration files (for linear interpolation) cannot be uploaded via web interface
- Streamer can only unicast. It can, however, unicast to several destination addresses simultaneously
- All unit conversions assume DC, and may be incorrect for sinusoidal or square biases
- ssh cannot accept root logins, or logins without passwords (which currently includes every account!)
October 6, 2009 (release 2)
- Crython has learned about units and has mostly functional templates
October 6, 2009
- Crython has learned about units and has mostly functional templates
October 5, 2009
- Crython is learning about units (this is a little disruptive, and it's not done yet
- The board now includes a ssh client and NFS support
September 30, 2009
Many changes:
- there is now a functional Python module (crython), including CryoBoard and CryoStreamer classes;
- IP addresses are now assigned via DHCP by default;
- NTP is installed and configured by default;
- the PowerPC core operates at 300 MHz and is noticeably snappier;
- ...and much more.
September 1, 2009
There is now a "decimator" program on the board that grabs samples from the hardware, decimates them via a CIC, and emits them via a UNIX domain socket suitable for Python code to use. The bitstream is unchanged for this release.
The following Python snippet now retrieves 64 channels in a linear block:
import array, socket, os
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/decimator_socket")
while(1):
d = s.recv(64*4)
a = array.array('i')
a.fromstring(d)
for x in a:
print '%i' % x
August 28, 2009
This firmware release adds support for the SD card (see
SDSlotRetrofit).
This topic: CryoElectronics
> WebHome > FirmwareReleases
Topic revision: r41 - 2014-08-27 - JoshuaMontgomery