Kernel v4.41 Upgrade
Changes to note
Obsolescence of legacy Atmel and Winbond 256Kbyte and 512Kbyte flash chips has prompted an upgrade of the on-board RTOS kernel of Mosaic's QCard, QScreen, Handheld Controllers. The change should have no consequences for most users' existing application code base.
Your code is affected only if you are using the Wildcard Carrier Board. In that case, your existing code will still work, but you will need an updated install.txt
file to load your code onto new controller boards. The best way to get that file is to update your kernel extensions at the Kernel Extension Manager.
All customers are encouraged to update their kernel extensions to the most recent versions by using the Kernel Extension Manager.
Under the hood
Prior supported Atmel and Winbond Flash chips are now obsolete. We have redesigned the Flash-writing routines in the kernel to support newer chips1) which have a variety of write-sector sizes and require varied erase and write procedures. Whereas before writing to Flash required only a small write buffer, located in common RAM, some Flash chips now require a larger buffer, which must be located in paged memory.2)
The upgrade from Kernel v4.40 to v4.41 adds smart multi-flash-chip support to the kernel routine TO.FLASH and incidentally fixes a statistics bug in the mathematical function RANDOM.GAUSSIAN. No calling addresses of any routines in the kernel are changed; they are all the same as v4.40. Consequently, you do not need to recompile your code to run on v4.41; any S-record or other application code image compiled on v4.40 will run correctly on v4.41. The kernel routine TO.FLASH in v4.41 reads the flash type, and supports legacy Atmel and Winbond 256Kbyte and 512Kbyte flash chips, as well as the SST29SF040 and SST39SF040 512Kbyte flash chips.
All v4.41 controller boards are shipped with an SST29SF040-70-4C-NHE
Flash device. As that device uses the smallest buffer size in on-board RAM, the change is completely without consequence to end-user's application code.
However, if you currently use a Wildcard Carrier Board you should update your kernel extensions to force an update of the install.txt
file used to install your application code on the board. You can then recompile your application code using the updated kernel extensions.
512K: Atmel AT29C040A Winbond W29C040 SST SST29SF040 SST SST39SF040 256K: Atmel AT29C020 Winbond W29C020C SST SST39SF020and in particular, these SST chips:
SST39SF040-70-4C-NHE or SST39SF040-55-4C-NHE (plcc-32 512Kbyte flash, 4Kbyte sectors) SST29SF040-70-4C-NHE (plcc-32 512Kbyte flash, with 128 byte sectors)Even though Atmel flash is obsolete kernel v4.41 still supports AT29C040A for legacy sake:
AT29C040A (plcc-32 512Kbyte flash, with 256 byte auto-erase sectors)Winbond Flash W29C040 went obsolete several years ago; it behaved identically to AT29C040A. Because the SST29SF040 uses different unlock addresses, and because it is used as our new default 512K flash, Flash write routines default to it if the device ID read is not recognized.
Device | Flash size | Sector size | Buffer location |
---|---|---|---|
Atmel AT29C020 | 256K | 256 bytes | B200 - B2FF |
Atmel AT29C040A | 512K | 256 bytes | B200 - B2FF |
SST SST39SF020 | 256K | 4092 bytes | 0F3000 - 0F3FFF |
SST SST29SF040 | 512K | 128 bytes | B200 - B2FF |
SST SST39SF040 | 512K | 4092 bytes | 0F3000 - 0F3FFF |
Winbond W29C020C | 256K | 256 bytes | B200 - B2FF |
Winbond W29C040 | 512K | 256 bytes | B200 - B2FF |