summaryrefslogtreecommitdiff
path: root/downloader/downloader.py
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-07-03 21:02:45 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-07-03 21:02:45 +0000
commitc843e1ea6b9ccaf7cfe70182f04e82f143cb289a (patch)
treec2a5d9d940372c1386fe18c3ed250d2cd987277a /downloader/downloader.py
parentsmall reordering (diff)
implemented basic commands
git-svn-id: https://svn.spreadspace.org/pic/trunk@26 a09c6847-51d9-44de-8ef2-e725cf50f3c7
Diffstat (limited to 'downloader/downloader.py')
-rwxr-xr-xdownloader/downloader.py49
1 files changed, 30 insertions, 19 deletions
diff --git a/downloader/downloader.py b/downloader/downloader.py
index 41e60c2..936f459 100755
--- a/downloader/downloader.py
+++ b/downloader/downloader.py
@@ -125,13 +125,13 @@ def exec_command(dev, cmd, answer):
3: "not implemented", 4: "flash write error",
5: "address invalid", 6: "address prohibited" }
- answer = "=cB" + answer + "B"
+ answer = '<cB' + answer + 'B'
answer_len = struct.calcsize(answer)
cstr = cmd + calc_csum(cmd)
os.write(dev, cstr)
- astr = ""
+ astr = b''
while len(astr) < answer_len:
astr += os.read(dev, answer_len - len(astr))
data = list(struct.unpack(answer, astr))
@@ -158,39 +158,49 @@ def exec_command(dev, cmd, answer):
### Commands
def identify(dev):
- data = exec_command(dev, "i", "BB10sHBB")
+ data = exec_command(dev, 'i', 'BB10sHBB')
id = { 'ver_maj': data[0], 'ver_min': data[1], 'name': data[2], 'devid': data[3], 'fss': data[4], 'supported': data[5] }
if id['ver_maj'] != VERSION_MAJ:
- print "Incomaptible protocol version, expected: %d, got: %d" % (VERSION_MAJ, id['ver_maj'])
+ print "incompatible protocol version, expected: %d, got: %d" % (VERSION_MAJ, id['ver_maj'])
+ sys.exit(4)
+ if id['fss'] == 0:
+ print "FSS value is 0 "
sys.exit(4)
print "connected with Bootloader '%s', (ID=%04X, FSS=%d)" % (id['name'], id['devid'], id['fss'])
return id
def boot(dev):
- exec_command(dev, "b", "")
+ exec_command(dev, 'b', '')
-def reset(dev):
- exec_command(dev, "r", "")
+def reset(dev, id):
+ exec_command(dev, 'r', '')
-def read_flash(dev):
- return None
+def read_flash_segment(dev, id, addr):
+ cmd = struct.pack('<cH', 'f', addr)
+ return exec_command(dev, cmd, '%dH' % id['fss'])
-def write_flash(dev):
- return None
+def write_flash_segment(dev, id, addr, data):
+ cmd = struct.pack('<cH%dH' % id['fss'], 'F', addr, *data)
+ return exec_command(dev, cmd, '')
-def read_eeprom(dev):
- return None
+def read_eeprom(dev, id, addr, len):
+ cmd = struct.pack('<cHH', 'e', addr, len)
+ return exec_command(dev, cmd, '%dH' % len)
-def write_eeprom(dev):
- return None
+def write_eeprom(dev, id, addr, len, data):
+ cmd = struct.pack('<cHH%dH' % len, 'E', addr, len, *data)
+ return exec_command(dev, cmd, '')
-def read_config(dev):
- return None
+def read_config(dev, id, nr):
+ cmd = struct.pack('<cB', 'c', nr)
+ data = exec_command(dev, cmd, 'H')
+ return data[0]
-def write_confi(dev):
- return None
+def write_config(dev, id, nr, word):
+ cmd = struct.pack('<cBH', 'C', nr, word)
+ return exec_command(dev, cmd, '')
### Main
@@ -199,6 +209,7 @@ if __name__ == '__main__':
import getopt
import sys
import os
+ import struct
usage = '''spreadspace simple pic downloader.
Usage: