summaryrefslogtreecommitdiff
path: root/utils/hwstub/tools/lua/i2c_scan.lua
diff options
context:
space:
mode:
Diffstat (limited to 'utils/hwstub/tools/lua/i2c_scan.lua')
-rw-r--r--utils/hwstub/tools/lua/i2c_scan.lua39
1 files changed, 38 insertions, 1 deletions
diff --git a/utils/hwstub/tools/lua/i2c_scan.lua b/utils/hwstub/tools/lua/i2c_scan.lua
index def7b5d..55066b0 100644
--- a/utils/hwstub/tools/lua/i2c_scan.lua
+++ b/utils/hwstub/tools/lua/i2c_scan.lua
@@ -8,4 +8,41 @@ function I2CSCAN.scan()
print(string.format("%#x OK", i))
end
end
- end \ No newline at end of file
+end
+
+-- if file is nil, return array
+-- if size is nil, dump the whole EEPROM
+function I2CSCAN.dump_rom(file, size)
+ STMP.i2c.init()
+ STMP.i2c.set_speed(true)
+ if not STMP.i2c.transmit(0xa0, {0, 0}, false) then
+ error("Cannot send address")
+ end
+ local res = {}
+ if size == nil then
+ size = 0xffff
+ end
+ for i = 0, size do
+ local l = STMP.i2c.receive(0xa0, 1)
+ if l == nil then
+ error("error during transfer")
+ end
+ for i = 1, #l do
+ table.insert(res, l[i])
+ end
+ end
+ if file == nil then
+ return res
+ end
+ local f = file
+ if type(file) == "string" then
+ f = io.open(file, "w")
+ end
+ if f == nil then error("Cannot open file or write to nil") end
+ for i = 1, #res do
+ f:write(string.char(res[i]))
+ end
+ if type(file) == "string" then
+ io.close(f)
+ end
+end \ No newline at end of file