This page has been last updated on September 12th, 2002
For any remarks, bug reports, questions, etc, feel free to write me at email@example.com
All updates are there!!!
This page won't be updated any longer.
New visitors: before downloading, send me an email so I can add you to my distribution list, for updates, critical changes, etc.
This page is dedicated to my SANOS UNIVERSAL PROGRAMMER project. The entire project is written using Borland Delphi, except for the parallel port drivers. The aim is to use this software to program all programmable devices (microcontrollers, memories (Flash, EEPROM) etc) using the parallel port and a specific hardware interface.
The software is divided in several parts:
- a general programming interface, implementing commands and data management;
- two parallel port drivers, one for Win95/98/Me and one for Win NT/2000/XP
- programming plug-ins, defining a set of hardware devices that it programs, using a specific hardware interface. All specific management is defined inside these plugins.
The complete source code has not been and probably will not be released, mainly because the maintenance task is quickly growing up and a decentralized maintenance will be very difficult to manage.
However, since the main idea is to make a collection of as many plugins and hardware interfaces as possible in order to implement programming for as many hardware devices as possible, some code skeletons and examples will be released, if this code can be of a wide interest.
Eventual third-party plugins will be maintained and tested solely by their creators. It will be their choice if they will want to release sources or not, or if the plugin will be freeware, shareware, mailware, *ware or commercial.
I am willing to modify the programming interface to adapt to new features not yet present and to host their plugins on this site or to create links to their sites if this is their wish.
I hope you will find the project interesting enough to start writing plugins for the hardware devices you are interested in programming, so other people could benefit too.
I am reminding to all interested people that this project is built, maintained and updated BEFORE or AFTER work hours. This is why the delays are sometimes longer than I wish. However I do my best to keep updates at reasonable intervals.
The programmer interface is 100% done (until new features will require its change). It is multilanguage (English, French, Romanian and Italian implemented so far). It also features an online HTML help, available only in English.
Five plugins were written this far, implementing programming for:
- Atmel AVRs (Low-voltage serial programming);
- Atmel AVRs (Hi-Voltage Serial programming - this one was a bitch);
- Atmel AVRs (Hi-Voltage parallel programming);
- Microchip/Atmel/etc. I2C EEproms;
- Microwire EEproms.
Make sure you read the SDK documentation if you want to start writing your own plug-ins. The Atmel AVR Low-voltage serial plugin comes with full sources as a programming example.
The new version features a detailed documentation in compiled HTML format, parallel port checkup directly from the interface, serial numbering for mass-production cloning (7 bytes available), etc.
Installation and uninstallation was automated and the distribution was reduced to only one auto-installing archive made up of nine volumes.
All the interface and plugins were rewritten to accept C-written plugins, and their call declaration was changed from register to stdcall.
Starting version 18.104.22.168, scripting was implemented.
Many thanks to all the users who have reported all kind of things, their words improved the code dramatically.
The first wish is to change the interface completely, in order to make the access to the hardware integrated into the Windows environment, like the software that comes with the card readers (Smartmedia, etc) :
Insert the hardware interface and a special service will make available one, two or several drives with direct R/W access to the device (memory, MCU, etc). The device is identified with an unique code, and all plugins will have to have a supplementary function which will show which plugin works with which interface. The service will scan all plugins to see if it finds one that works with the programming interface inserted into the parallel port, and if it finds one, it will ask that particular plugin how many drives it should create and also their dimensions, based on the device inserted into the programming interface.
I thought to create a limited number of drives, e.g. for an AVR three would be required:
- one for the Flash area;
- one for the EEprom area (if the AVR has an EEprom area);
- one for the lock and fuse bits;
In order to implement this interesting features, I still need information about how to write the following (in Delphi):
- services (I have basic info on this);
- how to create and destroy drives using Windows API;
Should you have this info and/or links to pertaining materials, feel free to write me.
Info On Sanos Plugins
Device PROGRAMMING SUPPORTED (Yes/No) AND PLUGIN
SANAVRLoVSer SANAVRHiVSer SANAVRPar
-ATtiny10 N Y N
-ATtiny11 N Y N
-ATtiny12 Y Y N
-ATtiny15L Y Y N
-ATtiny28L N N Y
-AT90S1200 Y N Y
-AT90S2313 Y N Y
-AT90S2323 Y Y N
-AT90S2343 Y Y N
-AT90S2333 Y N Y
-AT90S4433 Y N Y
-AT90S4414 Y N Y
-AT90S8515 Y N Y
-AT90S4434 Y N Y
-AT90C8534 N N Y
-AT90S8535 Y N Y
-ATmega8 Y N Y
-ATmega16 Y N Y
-ATmega64 Y N Y
-ATmega103 Y N Y
-ATmega128 Y N Y
-ATmega161 Y N Y
-ATmega163 Y N Y
-ATmega323 Y N Y
The new SanI2CEEP.dll plugin supports programming the following I2C EEproms:
24xx00 ( 16 bytes I2C EEprom)
24xx01 (128 bytes I2C EEprom)
24xx02 (256 bytes I2C EEprom)
34xx02 (256 bytes I2C EEprom, Software WP)
24xx04 (512 bytes I2C EEprom)
24xx08 ( 1 kbyte I2C EEprom)
24xx09 ( 2 kbytes I2C EEprom)
24xx16 ( 4 kbytes I2C EEprom)
24xx21 (128 bytes I2C EEprom, Dual Mode)
24xx22 (256 bytes I2C EEprom, VESA E-EDID )
24xx24 (256 bytes I2C EEprom)
24xx25 (256 bytes I2C EEprom)
24xx32 ( 4 kbytes I2C EEprom)
24xx41 (128 bytes I2C EEprom, Dual Mode, Data Port )
24xx41 (512 bytes I2C EEprom, Dual Mode, MCU Port )
24LCS52 (256 bytes I2C EEprom, Software WP )
24LCS61 (128 bytes I2C EEprom, Software Addressable )
24LCS62 (256 bytes I2C EEprom, Software Addressable )
24xx64 ( 8 kbytes I2C EEprom)
24xx128 ( 16 kbytes I2C EEprom)
24xx164 ( 16 kbytes I2C EEprom)
24xx256 ( 32 kbytes I2C EEprom)
24xx512 ( 64 kbytes I2C EEprom)
24xx515 ( 64 kbytes I2C EEprom)
24xx1024 ( 128 kbytes I2C EEprom)
The new SanMicrowire.dll plugin supports programming the following Microwire EEproms: