I2C

I2C读取频率和DMA配置问题

发布于 2020-09-14 18:17:47

遇到的问题有2个:

  1. 作为主设备用I2C读取数据的频率能否提高
  2. I2C如何或者能否配置DMA

第一个问题的现象:参考官方I2C文档用STM32F105作为主设备读取数据,从设备以50HZ左右的速度发送数据。下面的代码显示2次循环间,系统节拍计数t增加了60多,RT_TICK_PER_SECOND是配成了1000,应该意味着2次read_regs间隔了60+ms,达不到50HZ,实际上也没读到全部预期数据。用HAL库的I2C类似循环读取打印的程序可以达到50HZ。有没有哪里可以修改,使得软件I2C可以2次read_regs的间隔缩短?read_regs定义参考官方文档,如果注释掉read_regs和相关打印代码,增加一行打印20个数据的代码,计数t每个周期会增加11,看上去主要耗时在read_regs这个函数内。

int main(void)
{
    rt_uint8_t i;
    rt_tick_t t;
    custom_i2c_init();
    while (1)
    {
        t = rt_tick_get();
        read_regs(i2c_bus, 20, i2c_buffer);
        for(i=0; i<20; i++){
            rt_kprintf("%d ", i2c_buffer[i]);
        }
        rt_kprintf("  %d\r\n", t);
    }

    return RT_EOK;
}

第二个问题:官方文档上没看到I2C配置DMA的信息,不知道是否支持。不确定是不是参照RT-Thread Studio 结合 STM32CubeMx 开发其他驱动文档,RT-Thread Studio生成框架时不选择软件模拟I2C,直接拷贝CubeMX的I2C DMA代码。

查看更多

关注者
0
被浏览
57
1 个回答
aozima
aozima 3 days ago
拒绝白嫖,拒绝键盘侠!

逻辑分析仪抓一下,现在I2C的时钟是多少?

读一次要多久? 50hz你是如何保证的? 从机发中断过来吗?
还是主机主动控制时间? 代码没看到。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友