原创 I2C通信调试通过

2009-10-22 15:26 1781 5 5 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2009/10/22/d7a52061-6f39-4431-ae14-99c24fa437d4.rar" target=_blank>今天终于联调通过了I2C通信,花了一天的时间来把关I2C协议,用普通I/O口进行模拟,搞了个算是很完美的程序吧(虽然以前也系统的写过I2C程序,不过时间一长,就。。。)
现把调试过程写出来,留个纪念,也可以跟大家分享分享,呵呵。。。
我呢,先是用普通单片机(其实就是51)做主控芯片,来操纵I2C芯片,由于电压的要求不同,所以用了两个电源(51是5V供电的,I2C芯片是3V干电池供电的),结果程序死活都通信不了,专门测试了I2C芯片的应答位,结果一直是高电平。大家都知道,I2C主机给从机发送一个字节后,从机给主机一个应答(低电平)。然后就郁闷了,因为这个程序(还不是最终的那个比较完美的)应该不会有错,我专门用它试了来操纵AT24CXX的E2PROM,结果是访问通信一切都是正常的。
后来,查了查原因,最有可能的就是两个电源的问题,试着想一下,5V的高电平加到3V的I/O上(其实我这个I2C传感器芯片电压范围是2.5V~3.3V),先不说I/O口是否受得了,就是这估计也会出现不可预知的问题,再说,这样短时间内芯片还不会有什么问题,要是时间一长,极有可能连芯片都要报废了。。。
但是呢,手边又没有其他低电压的单片机芯片,不过有块arm板子,一看原理图,果然可以,就是使用扩展出来的GPIO口(有3.3V的电源输出),但是这时问题又来了,用arm板的话,写程序直接操纵I/O口会比较麻烦,而且有OS的情况下,一般都不这么做,后来就想了想,干脆写个裸机程序不就可以了,说干就干,写了个I2C的裸机程序拿到arm板上跑,烧进去之后。。。
果然一切通信正常,心中顿时很爽啊,呵呵。。。
接下来就要再移植到我们这个项目需要的平台上,然后还要处理传感器的数据,这块也是个不小的难题啊,因为输出的是有关磁场变化的数据,用示波器应该会很有帮助的,呵呵。
好了,就先写到这吧,以后项目有什么新的进展,再来分享。。。


把I2C通信程序奉献出来,大家踊跃些吧,呵呵!


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条