You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BeagleBone Black PRU I2C外设单次事务后故障求助

BeagleBone Black PRU上pru-i2c-lib库I2C读取异常问题求助

我在BeagleBone Black的PRU上使用pru-i2c-lib库通过I2C总线采样传感器,发现仅首次事务能正常执行,之后库仅尝试从寄存器地址0xFF读取,随后SCL线被拉低(逻辑分析仪已捕获该现象)。我已在该项目GitHub提交issue,但仓库多年未更新、作者2019年后未活跃,没指望得到回复。

为排查问题,我把寄存器地址和接收数据写入共享内存,通过prudebug查看。测试中尝试读取寄存器0x00和0x03,内存中写入的寄存器地址正确,但仅首次返回值0xEA正常,后续共享内存接收缓冲区写入的值全为0xFF,和逻辑分析仪显示的后续读取地址为0xFF的现象完全一致。

我无法定位问题所在,恳请技术帮助!主代码如下,库函数可查看项目内的pru_i2c_driver.c文件:

uint8_t curr_data_idx = 0;
uint8_t tmp = 0;
uint8_t reg = 0x00;
volatile uint8_t * buf = ((volatile uint8_t*)(RESERVED_SMEM_ADDR + 32));

int main(void)
{

    // enable OCP
    CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;

    pru_i2c_driver_DelayMicros(500000);

    uint8_t res = 0;
    res = pru_i2c_driver_Init(1);
    uint8_t saddr = 0x68;

    pru_i2c_driver_ReadReg(1, saddr, reg, &tmp);
    buf[curr_data_idx] = tmp;
    pru_i2c_driver_DelayMicros(1000);
    curr_data_idx++;

    reg = 0x03;
    pru_i2c_driver_ReadReg(1, saddr, reg, &tmp);
    buf[curr_data_idx] = tmp;
    pru_i2c_driver_DelayMicros(1000);
    curr_data_idx++;
   
    __halt();
    return 0;
}

内容的提问来源于stack exchange,提问作者lrdewaal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:03:17