本帖最后由 gaoyang9992006 于 2023-7-1 19:50 编辑
首先引入I2C的头文件
在setup中使用
启用I2C总线接口
一般I2C的主机操作有两个:读和写
而读写都要遵从I2C协议:
写入:以开始信号+从机地址+若干字节(内存地址+发送数据)+结束
所以在ARDUINO中方法如下,我们将使用SI5351来示例:
- void SI5351_WR_Byte(unsigned char reg_addr, unsigned char dat)
- {
- Wire.beginTransmission(SI5351A_ADDRESS); // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
- Wire.write((unsigned char)reg_addr); // 发送地址字节,注意有效位为低8位,自动生成的地址为16BIT的。
- Wire.write(dat); // 发送数据字节
- Wire.endTransmission(); // 结束传输
- }
而读数据呢也是类似的,开始信号+从机地址+结束+开始读取
- unsigned char SI5351_RD_Byte(unsigned char addr)
- {
- unsigned char dat = 0;
- Wire.beginTransmission(SI5351A_ADDRESS); // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
- Wire.write(addr); // 发送地址字节
- Wire.endTransmission(); // 结束传输
- Wire.requestFrom(SI5351A_ADDRESS, 1); // 请求从设备地址SI5351A_ADDRESS读取1个字节的数据
- if (Wire.available())
- {
- dat = Wire.read(); // 读取数据字节
- }
- return dat;
- }
而后其他的上层函数就调用这两个基本上都可以满足需求了。
另外在启用I2C时候还可以指定管脚,另外还有多种其他用法的函数,请阅读官方文档。
|