在新版芯片(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