rockbox/utils/hwstub/tools/lua/i2c_scan.lua
Amaury Pouly 58bb4b9b4c hwstub: implement i2c and i2c eeprom dump
Change-Id: Iff1b4f40affb88c104e7322e25cdbe34f8886476
2013-12-06 01:56:04 +01:00

48 lines
No EOL
1.1 KiB
Lua

I2CSCAN = {}
function I2CSCAN.scan()
STMP.i2c.init()
STMP.i2c.set_speed(true)
for i = 2, 254, 2 do
if STMP.i2c.transmit(i, {}, true) then
print(string.format("%#x OK", i))
end
end
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