i2c 驱动工作

来源:互联网 发布:vscode设置字体颜色 编辑:程序博客网 时间:2024/06/10 21:16

在新版芯片(fpga)上写驱动:

1. 新版芯片是否需要i2c slave?

   单片机很少有i2c slave 模块的,我们的芯片上有,细问下来是为了debug,可以读cpu内部的寄存器来debug,但是最后这个module要不要拿掉再说。

注意:i2c的slave和master是两个module,之前以为是一个,然后设置一个状态位,0是master, 1就是slave。

这个和公司的spi不一样。为什么不一样,我觉得spi本身的协议只是负责传输数据,是传输命令地址还是数据需要上层用户自己实现。而I2c协议除了定义了传输时的timing,更上层如何读或写数据都定义了,所以i2c这个module比较大,实现了更多的协议,不像spi,设个状态位master和slave就切换了。


不过像spi flash这种,应该是flash本身按照spi指定了一套协议,需要按照这个协议去访问这个flash,这个就跟i2c从器件类似了。



2.所有的i2c peripheral 都是一样的I2c协议,都是发id和address,然后就可以读和写这个地址的数据。所有的i2c从器件都可以这样操作。



3.记住每个字节都有ack位(第九个脉冲),就算是16位的地址,也是分开发,第一个8个字节后就有一个ack位。


4写的波形,start-->id-->adrress-->data-->stop

  read波形 start-->id-->adrress-->stop   start-->id-->data-->stop  要start两次



5.burst write eeprom时,length太大会出错?

sccb的burst write时就是页写,长度不能超过页的大小,否则会出错。其实就是长度大的话,比如一页大小128个字节,写的长度是512,那写到129时,eeprom的地址不会自动加1,而是回到了这一页的开始,所以,出错就是把一开始的数据又给覆盖了。


BTW:eeprom的页写和字节写差不多,就是主器件不会在写完第一个字节后发送停止位。



6 eeprom可以指定不同的页吗? 

 可以, 有页地址


7.iic的restart mode

read 的时候有这种模式,正常是start-->id-->adrress-->stop   start-->id-->data-->stop  

restart模式少了第一个stop。

好处:快了一点点。



看材料:

ARM_2440_IIC总线接口_中文资料.pdf

    

0 0