STM32/STM8技术william hill官网
直播中

VCX

5年用户 20经验值
私信 关注
[问答]

OD2101 IIC转UART芯片收数据,只能读取到64字节数据

采用STM32 mcu,采用电脑串口向OD2101发送100字节的数据(od2101缓冲区最多只能缓存64字节数据),I2C从这个芯片却只能读取到64字节数据,有什么办法能够读到100字节数据吗?
这是收到数据产生中断的代码

if (Set == EXINT_IrqFlgGet(ExtiCh05))
    {
      Ddl_Delay1ms(50);
                        od2101_Read_Reg(UARTBUF,&len,1);
                                printf("recv len=%dn",len);
                                        for (uint8_t i=0; i
                                                od2101_Read_Reg(RD,&recv_buf,1);
                                        }


                                        ctrl = 0x80;
                                od2101_Write_Reg(CTRL, &ctrl,1);
                                        printf("recv_buf=%sn",recv_buf);
                        
        /* clear int request flag */
        EXINT_IrqFlgClr(ExtiCh05);
    }
                Ddl_Delay1ms(50);

已退回5积分

回帖(1)

马祥

2019-3-6 16:45:45
注意 I2C 的传输协议对 ACK 的定义。在一个字节帧中有一个 ACK 位,接收方在正确接收后且要继续接收时,要将数据线在此时刻拉低。

如果发送方检测到 ACK 依然是高,有如下可能:
1   没有响应的接收方;
2   接收方接收错误;
3   接收方不再继续接收。

此情况下,发送方就会停下来。

这些协议控制,一般都是硬件实现的。

你的情况很可能是外界干扰导致发送方未能正确识别 ACK:
1   检查你作为接收方器件的驱动能力。
2   试试增大上拉电阻,减小上拉强度,降低对接收方的下拉驱动能力要求。
3   适当采取抗干扰措施,如缩短或加粗信号线,使用屏蔽线等等。

很可能你周边在下午有强力电机启动,或有较强的无线信号发射运行。
举报

更多回帖

×
20
完善资料,
赚取积分