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
相关产品推荐
相关产品推荐

