金牌会员
 
- 积分
- 1334
- 金钱
- 1334
- 注册时间
- 2013-12-28
- 在线时间
- 197 小时
|
本人学习单片机几个月了,从51,avr到现在的STM32。我本是一个学机械的,但因为对电子这块有很大的兴趣,所以选择了自学单片机,也想着自己以后能去单独开发一款产品。因为基础薄弱,一路过来遇到了很多麻烦,还好买了原子哥的战舰版,知道了这个论坛,有不懂的地方可以问问大家。
对IIC这块我花的时间也蛮长的,在51和STM32中用的都是模拟IIC,在AVR中用的是硬件的,我下面主要说的是模拟IIC,多机通信我还没做过,这里只说两机通信。以AT24C02来说:
1.IIC总线空闲的时候,SDA和SCL都为高电平,所以硬件电路中一般在IIC两根总线上各接一个电阻后再接VCC,
2.
开始,终止信号就注意里面的几个时间就可以了,看AT24C02数据手册中提到的几个时间,下图中就有标示。通过软件延迟去满足。如果是IIC跟其余的芯片进行通信时也需要看看给的这个时间是否满足要求,一般都应该差不多。
3.
总线中的时序需要满足,比如SCL中提到的T_low,T_high。IIC总线速度在400KHZ以下,如果不给这个时间的话就可能超过400KHz了,也可以通过调整这几个时间去调整IIC通信的速度。
SDA一般只有在SCL位低电平的时候才能变化,因为起始,停止信号是在SCL为高的时候SDA发生变化,为了区别,所以一般在写入/读出数据时只能在SCL为低时SDA发生变化。这点在编程的时候要特备注意。
4.在用IIC总线向AT24C02写入一字节或读取一字节数据时需要知道什么时候在SDA总线上写入一个位或者什么时候从SDA总线上去读取一个位,有资料说是在SCL的上升沿才能将数据写入AT24C02中,在SCL的下降沿才能从
AT24C02 中读出数据。那就是在写入数据时就是要先改变SDA的值再去制造一个SCL的上升沿,需要在SCL的下降沿后从SDA总线上去读取数据。先后顺序必须把握好。
5.重点想说的就是应答信号和非应答信号。在这块我吃过很多亏。
应答信号分为主机应答 和从机应答 ,这两者有着很大的区别。主机应答是在主机从从机中读取数据时每次读取完一个字节的数据后主机给从机的一个应答信号,表示主机已收到数据了。而从机应答是指主机给从机发送数据时从机给主机的应答,给一个应答就代表从机已经收到了数据,为主机接下来的工作做个判断。主机在核查从机的应答信号的时候,必须先将SDA总线拉高,释放总线。
非应答信号是主机给从机的,当读取完一字节数据以后,主机不再去读取数据就给从机一个非应答信号,接着一个停止信号,直接给停止信号也是可以结束此次读操作,但是会对后面的操作带来影响。我在操作RDA5820的时候就深受其害,所以还是不套图省事,养成好的习惯,非应答信号在需要的时候必须给。
上面是我个人的一些总结,有什么不对的望指正!高手们有什么添加的可以再后面跟上,谢谢!大伙共同学习!
|
|