diff options
Diffstat (limited to 'downloader')
-rwxr-xr-x | downloader/downloader.py | 15 | ||||
-rw-r--r-- | downloader/proto.txt | 20 |
2 files changed, 12 insertions, 23 deletions
diff --git a/downloader/downloader.py b/downloader/downloader.py index c0ce34f..653bd72 100755 --- a/downloader/downloader.py +++ b/downloader/downloader.py @@ -108,11 +108,9 @@ def exec_command(dev, cmd, param, answer): 5: "address invalid", 6: "address prohibited", 7: "value out of bounds" } - dev.flushInput() - dev.flushOutput() - - cstr = bytearray(struct.pack('<BB', cmd, len(param)+3) + param) + cstr = bytearray(struct.pack('<BB', cmd, 0) + param) cstr.extend(struct.pack("<B", calc_csum(cstr))) + cstr[1] = len(cstr) dev.write(cstr) astr = bytearray() @@ -158,9 +156,9 @@ def exec_command(dev, cmd, param, answer): ### Commands def identify(dev): - data = exec_command(dev, 1, '', '<BBHHHBHBH') - id = { 'ver_min': data[0], 'ver_maj': data[1], 'userid': data[2], 'devid': data[3], - 'fs': data[4], 'fss': data[5], 'es': data[6], 'mess': data[7], 'supported': data[8] } + data = exec_command(dev, 1, '', '<BB3sHBBH') + id = { 'ver_min': data[0], 'ver_maj': data[1], 'name': data[2], 'devid': data[3], + 'fss': data[4], 'mess': data[5], 'supported': data[6] } if id['ver_maj'] != VERSION_MAJ: print "incompatible protocol version, expected: %d, got: %d" % (VERSION_MAJ, id['ver_maj']) @@ -169,8 +167,7 @@ def identify(dev): print "FSS value is 0 " sys.exit(4) - print "connected with Bootloader '%04X' Version %d.%d, (ID=%04X, %d bytes Flash, FSS=%d, %d bytes EEPROM, MESS=%d)" % \ - (id['userid'], id['ver_maj'], id['ver_min'], id['devid'], id['fs'], id['fss'], id['es'], id['mess']) + print "connected with Bootloader '%s' Version %d.%d, (ID=%04X, FSS=%d, MESS=%d)" % (id['name'], id['ver_maj'], id['ver_min'], id['devid'], id['fss'], id['mess']) return id def boot(dev): diff --git a/downloader/proto.txt b/downloader/proto.txt index af32584..15caec7 100644 --- a/downloader/proto.txt +++ b/downloader/proto.txt @@ -43,36 +43,28 @@ identify: 1 | len=3 | <csum> answer: - 1 | len=22 | <ret> | version | userid | devid | fs | fss | es | mess | supported | <csum> + 1 | len=22 | <ret> | version | name | devid | fss | mess | supported | <csum> version: 2bytes, protocol version It is an error if the major version (MSB) is different (hence any protocol update must change the major version of the bootloader). - userid: - 2bytes, an id which determines the exact device - The downloader has to compare this with the device id supplied + name: + 3bytes, a descriptive name of the device. + The downloader has to compare this name with the device name supplied via commandline and stop in case they don't match devid: 2bytes, device id of the PIC The downlaoder may use this id to check if it talks to the right bootloader - fs: - 2bytes, flash size - The size of the flash in code words. - fss: 1byte, flash segment size The number of words of one flash segment which has to be written at once. If less than <fss> should be updated the downloader has to perform a read operation first. - es: - 2bytes, eeprom size - The size of the eeprom in bytes. - mess: 1byte, maximum eeprom segment size This represents the maximum number of eeprom bytes which may be written or @@ -165,12 +157,12 @@ write eeprom: ~~~~~~~~~~~~~ command: - 7 | len=4+len(data) | addr | data | <csum> + 7 | len=4+2<len(data) | addr | data | <csum> answer: 7 | len=4 | <ret> | <csum> - The bootloader writes <data> (which has to contain exactly <len>-4 bytes) to address + The bootloader writes <data> (which has to contain exactly <len> bytes) to address <addr> inside the eeprom. len is 1byte long and the value must not exceed <mess> bytes. |