IAP_07_一周还没解决从机发送NACK的问题
在下面这个帖子中,我描述了开发STC8H1K17 I2C 通讯的问题:IAP_06_从机没办法发出NACK - ISP下载/做自己的ISP 国芯人工智能技术交流网站 - AI32位8051交流社区
我的I2C是使用轮询的方式接收数据,每次要接收多个字节的数据,如果我要在主机发完最后一个字节数据的时候,从机发出NACK,我要怎么做?
好心人给我的回答是:
那我在轮询的程序中,要在哪里设置SLACKO为1呢? 在当前RXIF事件,清理RXIF标识位时同时给SLACKO置1,或者上一个RXIF事件接收完置1 ?
再不行上一个字节接受完加几个NOP总能把时间点卡在那个区间吧~ 接收指定字节数据后设置NAK标志即可,附件例子供参考
if(Rx_Cnt >= 3) //从机接收 4 个字节后返回 NAK
{
I2CSLST |= 1; //发送 NAK
}
RxBuffer = I2CRXD; //处理RECV事件(RECV DATA)
可以声明一个变量用于计数,在该位置判断是否收到若干个字节,如是,设置SLACKO为1,下一个应答位就会发送NACK
DebugLab 发表于 2025-9-1 12:36
可以声明一个变量用于计数,在该位置判断是否收到若干个字节,如是,设置SLACKO为1,下一个应答位就会发送N ...
我的思路就是这样子,不过不是放在rx_data = I2CRXD;的后面,而是放在了else if (I2CSLST & I2C_S_RXIF)代码块的中间,一直没起到想要的效果,和这个位置有关系吗? 乘风飞扬 发表于 2025-9-1 12:12
接收指定字节数据后设置NAK标志即可,附件例子供参考
谢谢你的回复,我也是这样处理的,但没起到效果,我对比下和你代码的差异 从机不需要发送NACK信号,主机在接收最后一个字节后发送NACK,从机就释放总线了,主机可以结束了或重新开始 Ayb_ice 发表于 2025-9-3 11:42
从机不需要发送NACK信号,主机在接收最后一个字节后发送NACK,从机就释放总线了,主机可以结束了或重新开始 ...
我的是主机发送,从机接收,从机发送NACK提醒主机:从机暂时接收不了数据,主机先别发了 zhouq 发表于 2025-9-4 18:28
我的是主机发送,从机接收,从机发送NACK提醒主机:从机暂时接收不了数据,主机先别发了 ...
你是主机,从机接收,从机数据线本身是释放的,你自己随时主动结束就可以了,主动权在你,从机怎么可能知道你要发多少数据呢 Ayb_ice 发表于 2025-9-5 08:29
你是主机,从机接收,从机数据线本身是释放的,你自己随时主动结束就可以了,主动权在你,从机怎么可能知 ...
主从机的代码都是我写,所以从机知道主机要发多少数据。从机每次都要接收主机发来的固定长度数据,然后处理数据,如果处理不对,就让主机等待,不要一直发。当前遇到的问题就是主机一直发,不管从机是否来得及处理,我的应对措施就是从机要是没处理完数据,就发NACK,主机收到NACK,就等待,不要一直发。
页:
[1]
2