树莓派 i2c写E2prom

学习记录

在整理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总线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值