本人使用AT24C02 EEPROM 芯片通过树莓派的I2C通讯,AT24C02 i2c地址为0x50.
以前一直用wringpi库开发树莓派程序,因为树莓派4不支持wringpi库,所以只能改为BCM2835库。
先比较wringpi的I2C函数,BCM2835库中I2C函数的说明并不清晰,所以总结如下:
重点说明bcm2835_i2c_write和 bcm2835_i2c_read_register_rs函数
uint8_t bcm2835_i2c_write ( const char * buf,uint32_t len)
Parameters
[in] buf : 要发送的地址及数据字节缓冲区。
[in] len :buf缓冲区中的字节数和要发送的字节数。
这里注意:
buf[0]为EEPROM 中的偏移地址,也就是要写入的数据段起始地址。
buf[1]->buf[n+1],为从起始地址开始写入的数据,共n个。
len=n+1;
uint8_t bcm2835_i2c_read_register_rs ( char * regaddr,char * buf,uint32_t len)
Parameters
[in] regaddr :EEPROM 中的偏移地址,也就是要读出的数据段起始地址。
[in] buf :接收字节的缓冲区。
[in] len :buf缓冲区中的字节数和接收的字节数。
这个函数比较好理解,如果要读n个数据,则 len =n;
I2C配置参考:
树莓派的I2C - AT24C02 EEPROM 芯片