学习记录
在整理I2C的过程中花费了大量的时间,相比之下,i2c的编程却超级简单,比stm32和单片机要简单的多得多。
功能
读取0x50设备地址下的ox00寄存器地址,然后向该寄存器写入新的内容,并读取出来。
代码
/*************************************************************************
> File Name: i2c_e2prom.c
> Author: admin
> Mail:
> Created Time: 2020年01月01日 星期三 17时31分35秒
> Modified Time:2020年01月01日 星期三 18时00分23秒
************************************************************************/
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <stdlib.h>
int main()
{
wiringPiSetup();
int fd = wiringPiI2CSetup(0x50);
int read1 = 0x00;
int write1 = 0xab;
int read2 = 0x00;
if(-1 == fd)
{
printf("wrong!\n");
exit(0);
}
read1 = wiringPiI2CReadReg8(fd, 0x00);
printf("read1 = %d\n", read1);
wiringPiI2CWriteReg8(fd, 0x00, write1);
read2 = wiringPiI2CReadReg8(fd, 0x00);
printf("read2 = %d\n", read2);
return 0;
}
现象
输出结果,可以看到0x50地址下的ox00原本是240(0xf0)的,经过程序修改为171(0xab)。
补充
有一个博客大佬xukai871105提出了双刃剑的理念。
wiringPi提供了一个很好的封装,但是也是一把双刃剑。对于初学而言可以很好的利用树莓派实现应用,绕开linux驱动方面的知识,但是慢慢熟悉之后还是要补充linux驱动方面的内容个,使用open、wirte和ioctl实现I2C设备的控制。
国外有很多博文指出,BCM2835的I2C存在问题,该问题发生在I2C Stop时序保持的时间太短导致I2C从设备无法正常体质。参考资料中的第1项包含对I2C硬件问题的讨论和解决方法,请各位参考。
微学课堂提供多种方法实现I2C通信。
通过一个简单的例程来讲解通过bcm2835,wiringPi,sysfs,python等方式来控制i2c总线