2013-10-21 22:24:32 +00:00
|
|
|
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
|
2013-12-06 00:56:04 +00:00
|
|
|
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
|