树莓派I2C修改传输速率及兼容repeated start iic设备

1,修改传输速率

默认状态下传输速率为100khz,使用如下命令查看:


sudo cat /sys/module/i2c_bcm2708/parameters/baudrate


你会看到显示100000,表示为100khz。


修改步骤如下:
1,sudo nano /boot/config.txt

2,在打开的文件中添加一行dtparam=i2c1_baudrate=50000假设我们将其设置为50khz).

  3,sudo reboot


打开后重新查看 你会发现速率已经改为50000了。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TC264是一款基于Cortex-M4内核的微控制器,它支持I2C总线通信协议。在TC264上使用I2C协议进行通信,需要按照以下步骤进行配置: 1. 配置I2C的时钟频率和数据传输速率。 2. 配置I2C总线的物理参数,如总线的引脚、电气特性等。 3. 配置I2C通信协议的参数,如地址、数据格式等。 4. 编写I2C的读写函数,实现数据的读写。 以下是一个简单的TC264上使用I2C协议进行通信的示例代码: ```c #include "stdint.h" #include "stdio.h" #include "stdlib.h" #include "stdbool.h" #include "xmc_gpio.h" #include "xmc_i2c.h" #define I2C_ADDR 0x50 /* 初始化I2C总线 */ void i2c_init(void) { XMC_I2C_CH_CONFIG_t i2c_config = { .baudrate = 100000, // I2C的时钟频率 .address_mode = XMC_I2C_CH_ADDR_MODE_7BIT, // 地址模式 .acknowledge_mode = XMC_I2C_CH_ACKNOWLEDGE, // 应答模式 .digital_filter = XMC_I2C_CH_DIGITAL_FILTER_DISABLED // 数字滤波器 }; XMC_I2C_CH_Init(XMC_I2C0_CH0, &i2c_config); // 初始化I2C通道 XMC_I2C_CH_SetSlaveAddress(XMC_I2C0_CH0, I2C_ADDR); // 设置设备地址 XMC_I2C_CH_EnableEvent(XMC_I2C0_CH0, XMC_I2C_CH_EVENT_RECEIVE); // 启用接收事件 XMC_I2C_CH_EnableEvent(XMC_I2C0_CH0, XMC_I2C_CH_EVENT_TRANSMIT); // 启用发送事件 XMC_I2C_CH_Start(XMC_I2C0_CH0); // 启动I2C通道 } /* I2C读函数 */ void i2c_read(uint8_t reg_addr, uint8_t *buf, uint32_t len) { XMC_I2C_CH_ClearStatusFlag(XMC_I2C0_CH0, XMC_I2C_CH_STATUS_FLAG_NACK_RECEIVED); // 清除NACK错误标志 XMC_I2C_CH_MasterReceive(XMC_I2C0_CH0, I2C_ADDR, &reg_addr, 1, XMC_I2C_CH_CMD_START); // 发送寄存器地址 XMC_I2C_CH_MasterReceive(XMC_I2C0_CH0, I2C_ADDR, buf, len, XMC_I2C_CH_CMD_REPEATED_START | XMC_I2C_CH_CMD_STOP); // 读取数据 } /* I2C写函数 */ void i2c_write(uint8_t reg_addr, uint8_t *buf, uint32_t len) { uint8_t *data = malloc(len + 1); // 创建一个缓冲区,存储寄存器地址和数据 data[0] = reg_addr; // 将寄存器地址存入缓冲区的第一个字节 memcpy(data + 1, buf, len); // 将数据存入缓冲区的剩余部分 XMC_I2C_CH_ClearStatusFlag(XMC_I2C0_CH0, XMC_I2C_CH_STATUS_FLAG_NACK_RECEIVED); // 清除NACK错误标志 XMC_I2C_CH_MasterTransmit(XMC_I2C0_CH0, I2C_ADDR, data, len + 1, XMC_I2C_CH_CMD_START | XMC_I2C_CH_CMD_STOP); // 发送数据 free(data); // 释放缓冲区 } int main(void) { uint8_t data[2] = {0x01, 0x02}; // 待写入的数据 uint8_t read_data[2]; // 读取的数据 i2c_init(); // 初始化I2C总线 i2c_write(0x00, data, 2); // 向寄存器0x00写入数据 i2c_read(0x00, read_data, 2); // 从寄存器0x00读取数据 return 0; } ``` 在上面的示例代码中,我们首先调用`i2c_init()`函数初始化I2C总线,然后使用`i2c_write()`函数向寄存器地址为0x00的寄存器写入数据,最后使用`i2c_read()`函数从寄存器地址为0x00的寄存器读取数据。注意,在这个示例中,我们使用了从设备地址为0x50,你需要根据你的实际情况修改这个值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值