使用合宙的Air724UG的IIC2与AIP650芯片进行通信,控制LED,IIC工作一段时间(时间不定)过后出现时序错误。
Air724UG IIC2工作一段时间(时间不定)后时序出错,尝试不断电情况下,重新烧录程序,问题依旧存在。断电重启后才可正常工作
错误情况如下图:

正常情况图下图:

AIP650驱动Lua:
require "pins"
local I2C_ID = 2
local function setReg(reg, data)
i2c.send(I2C_ID, bit.rshift(reg, 1), data)
end
local ledSta = {
0x00,
0x00,
0x00,
0x00,
}
--执行时间 大概1.5~2ms
local function updateLed()
setReg(0x68, ledSta[1])
setReg(0x6A, ledSta[2])
setReg(0x6C, ledSta[3])
setReg(0x6E, ledSta[4])
end
local M = {}
M.init = function()
i2c.setup(I2C_ID, i2c.SLOW, 0x00)
setReg(0x48, 0x01)
M.setAllStatus(false)
end
M.restart = function()
i2c.close(I2C_ID)
i2c.setup(I2C_ID, i2c.SLOW, 0x00)
setReg(0x48,0x00)--睡眠禁止
setReg(0x48, 0x01)--系统使能
setReg(0x48, 0x11)--系统使能 8段显示
end
--
M.setLed = function(id, sta)
local index = math.floor(id / 8) + 1
local bitIndex = math.fmod(id, 8)
if sta == true or sta == 1 then
ledSta[index] = bit.set(ledSta[index], bitIndex)
else
ledSta[index] = bit.clear(ledSta[index], bitIndex)
end
end
M.setAllStatus = function(sta)
local dat = 0xFF
if sta then
dat = 0xFF
else
dat = 0x00
end
for i = 1, 4 do
ledSta[i] = dat
end
updateLed()
end
M.setAllStatusNoCache = function(sta)
local dat = 0xFF
if sta then
dat = 0xFF
else
dat = 0x00
end
setReg(0x68, dat)
setReg(0x6A, dat)
setReg(0x6C, dat)
setReg(0x6E, dat)
end
M.update = function()
updateLed()
end
return M
IIC 通讯控制在200ms执行一次updateLed()