24c04的第1/2/3三脚是地址脚,用于扩展,如果只用一个24c01,是为浪费cpu的io资源,将这三个引脚真接地线;第4脚是地线第5脚是sda,第6脚是scl,相对于有i2c的单片机,可与cpu的或者管脚两个对接,需要注意sda管脚底需要接上拉电阻,象10k表就行;第7脚是写保护,是对cpu管脚资源不是什么很丰富的,再接地;第8脚接电源,常见是5v24c04功能那就证明24c04a支持什么单向两线总线和数据传输规程。若器件传送数据到总线上,则定义法器件为正在发送器。若器件收不到数据,则符号表示器件为接收器。总线必须在一个主器件控制工作,主器件出现串行时钟(scl),操纵总线存取,因此出现就开始和停止下来条件。同样的24c04a充当从器件工作。主器件和从器件都可工作于发送器的状态。但工作于何种由主器件决定。
24c02c。
串行传输e2prom是基于条件i2c-bus的存储器件,按照二线制协议,导致其具备接口方便,体积小,数据掉电不全部丢失等特点,在仪器仪表及工业自动化控制中能得到大量的应用。
24c02与单片机的接口的很简单啊,e0,e1,e2为器件地址线,wp为写保卫引脚,scl,sda为二线串行接口,条件符合i2c总线协议。
i2c总线在用两根线,共有是时钟线scl和数据线sda,用scl的边沿歌词同步sda数据的读写,因此叫歌词同步串行通讯。
spi总线不使用四根线,和时钟线sclk、单向数据线mosⅰ和mⅰso和外部芯片片选ss。其中,mosi是单片机向外设输出低数据线,miso是外设向单片机输出来数据,这两个数据线也不需要时钟sclk同步,所以spi总线都是同步并行总线通讯。
正常情况下,i2c总线协议能绝对的保证总线正常读写操作。可是在某些异常情况下会可能导致i2c总线锁挡。或者主控制器突然复位、的或i2c总线上存在干扰、或则电源异常等都很有可能倒致i2c总线抱死。
在i2c主设备并且读写操作的过程中,主设备在开始信号后完全控制scl出现8个时钟脉冲序列。然后把拉低scl信号为低电平,在这会儿,从设备输出应和信号,将sda信号拉为低电平假如这个时候主设备异样复位,scl就会被释放为高电平。此时,假如从设备没有复位,是会一直i2c的应答,将sda拉为低电平,待到scl低电平,才会都结束了回话信号。而对于i2c主设备来说,复位后可以检测scl和sda信号,如果没有发现到sda信号为低电平,则会以为i2c总线被占用,会一直等待scl和sda信号不变高电平。这样,i2c主设备在等待从设备释放者sda信号,而另外i2c从设备又在在等待主设备将scl信号拉低以施放应答信号,两者相互间静静的等待,i2c总线进入到一种死锁状态。
同样,当i2c参与读操作,i2c从设备接腔后作为输出数据,如果没有在这个时刻i2c主设备极其复位而此时i2c从设备输出的数据位倒是为0,也会导致i2c总线再次进入死锁状态。
广州致远电子arm核心板不使用iic设备时,遇上总线死锁是要如何让总线死锁恢复呢,正确方法万分感谢:
(1)最好不要选用带复位输人的i2c从器件,从i2c总线死锁产生的原因是可以发现i2c总线死锁的一个必要条件是主设备复位了而从设备没有复位。假如从设备选用带复位再输入的芯片,将主从设备的复位信号再连接在一起,当外部才能产生复位事件时,主从设备另外复位,这样的话就绝对不会再一次发生i2c总线死锁现象了。这种方法的缺点又是非常明显的,必须,大部分i2c从器件都没有复位再输入,器件选型被了很小的限制;或者,这种这对主设备板载显卡看门狗紊乱的复位也没有效果。
(2)将所有的从i2c设备的电源连接在一起,实际m0s管连接到主电源,而mos管的导通关断由i2c主设备来利用一般来说,i2c主设备都是更具运算单元的处理器。操纵功能是可以实际处理器的gpio来实现程序。有时候主设备复位时,运行程序操纵gpio关断mos,使从设备没了电源。然后延迟现象一段时间后再导通状态mos管,给从设备上电,最大限度地达到让从设备强制复位的效果。这种方法能弥补第一种方法的不足,但会增加电源设计什么的复杂性,影响layout设计时电源的完整性;另外还要更改处理器的底层boot代码,引响底层软件的通用性和可移植性。
(3)在i2c从设备设计看门狗的功能。当i2c从设备先检测到自身正处于应答状态也可以低电平输出达到重新指定时间时,看门狗动作,复位i2c从设备。情况下不需要提高额外的硬件设计,可是特别要求i2c从设备更具可编程功能,也很适合从设备是单片机或cpld的情况。
(4)在i2c主设备中增强i2c总线完全恢复程序。每次i2c主设备复位后,假如检测检测到sda数据线被拉低,则完全控制i2c中的scl时钟线才能产生9个时钟脉冲电流(对于8位数据的情况),这样的话i2c从设备就也可以能完成被挂着的读你的操作,从死锁状态中完全恢复上来。这种方法有比较大的局限性,是因为大部分主设备的i2c模块由内置的硬件电路来实现。软件并不能够再控制scl信号模拟产生是需要时钟脉冲。可以使用别种方法这个可以不使用io模拟i2c,scl时钟易再控制。
(5)在i2c总线上提高一个额外的总线复原设备,这个设备监视i2c总线。当设备检测检测到sda信号被拉低超过指定时间时,就在scl总线上出现9个时钟脉冲波,使i2c从设备结束读你操作,从死锁状态上恢复不出来。总线恢复设备必须有具有编程功能,一般也可以用单片机或cpld实现方法这一功能。
(6)在i2c上串人一个更具死锁复原的i2c缓冲器。