不止st一家的i2c不好玩,我早前用pxa255的i2c也照样死掉。
除了st自己例子里说的要把中断设为最高优先级还有些语句要关中断执行以外
本身i2c状态机的设计也是有缺陷的
比如master模式还在跑(成功发出start但是还没有stop),而且没有丢失仲裁,
会在外部干扰比较大的时候跑进slave中断
原因是外部干扰在i2c上引发了start条件,于是进slave了,于是master和slave状态机同时跑,于是死掉了。
我的系统上了os,event超时后复位i2c模块,跑得还行。
比pxa好,pxa的i2c死掉以后复位模块都没有用,得复位cpu
nxp的好,毕竟是娘家,不会出现master slave同时跑的情况
调试的时候火大得想在外面加块nxp的i2c片子算了 |