微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc26xx i2c 写没问题,返回Ture,但读取的时候,程序跑飞,why?

cc26xx i2c 写没问题,返回Ture,但读取的时候,程序跑飞,why?

时间:10-02 整理:3721RD 点击:

i2c配置是按官方文档配置的,将sensorTag里面的bsp_i2c.c只能拿来用了,写是没有问题,就是读取的时候跑飞,但有试过读取成功(大部分是跑飞了),程序没变过,why why why?i2c设备是hmc5983。

hmc5983初始化如下:

int hmc5983Init()
{
    uint8_t buf[] = {HMC5983_R_CONFIG_A, 0x70, HMC5983_R_CONFIG_B, 0xA0,};
    uint8_t *p_buf = buf;
    bspI2cSelect(BSP_I2C_INTERFACE_0, HMC5983_ADDR);
    for (uint8_t i = 0 ; i < 2; i++)
    {
        bspI2cWrite(p_buf, 2);
        p_buf = p_buf + 2;
    }
}

读取测试代码如下:

while (1)
    {
        bool flag = FALSE;
        uint8_t write_buf[] = {HMC5983_R_MODE, 0x01};
        uint8_t *re_buf;
        uint8_t addr = 0x00;
        flag = bspI2cWrite(write_buf, 2);
        if (!flag)
            flag = FALSE;
        delay_ms(6);
        flag = bspI2cWriteRead(&addr, 1, re_buf, 15);
        if (!flag)
            flag = FALSE;

        delay_ms(67);
    }

每次就是在 flag = bspI2cWriteRead(&addr, 1, re_buf, 15);跑飞,求大神指点,thanks!

这个 flag = bspI2cWriteRead(&addr, 1, re_buf, 15);的第一个参数应该是addr,不应该是&addr吧,根据经验判断,也不应该是指针类型的。

我想你是以为这个地址是设备的地址了,这个是writeData的地址,而且,要是传参错误,直接编译都不会通过。

大神冒个泡呗

跑飞是什么意思,没有返回值还是什么?程序停下来的时候停在哪里?

你是连着蓝牙跑的还是裸跑的?

就是进去bspI2cWriteRead函数直接出不来了,暂停的时候是在红色框里,再按单步就直接在d6 d8循环跳,出不来,汇编也看不懂,求教,thanks

冷冷清清,凄凄惨惨戚戚

看你紧接着写然后就是读,会不会没有反应过来呢?加个延时看看,或者循环等待写数据OK再读。

本来读写函数就是读写完成了才返回的,所以不存在你说的问题,我测试过了循环一直写是没问题的,就是一读就莫名其妙的不行。

纠结了这么久还是找不出原因,请问我可以怀疑是协议栈的问题么,难道我要试试裸机跑跑看?但是实际应用还是要协议栈啊,就算裸机能行也没什么意义,醉了。协议栈用的是2.1的

专家专家,给抛个砖呗

按照你的说法,只能升级协议栈的版本和编译器的版本试试了。这么基本的驱动,不可能出问题的,官方都是测试过的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top