找回密码
 立即注册
查看: 366|回复: 10

IAP_07_一周还没解决从机发送NACK的问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-15 14:29:06
已绑定手机

18

主题

45

回帖

632

积分

高级会员

积分
632
发表于 2025-8-30 20:25:28 | 显示全部楼层 |阅读模式
在下面这个帖子中,我描述了开发STC8H1K17 I2C 通讯的问题:

IAP_06_从机没办法发出NACK - ISP下载/做自己的ISP 国芯人工智能技术交流网站 - AI32位8051交流社区

我的I2C是使用轮询的方式接收数据,每次要接收多个字节的数据,如果我要在主机发完最后一个字节数据的时候,从机发出NACK,我要怎么做?

好心人给我的回答是:
截图202508302026393349.jpg
那我在轮询的程序中,要在哪里设置SLACKO为1呢?
花有重开日,人无再少年
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:329
  • 最近打卡:2025-10-16 08:46:33
已绑定手机

85

主题

3257

回帖

7200

积分

荣誉版主

无情的代码机器

积分
7200
发表于 2025-8-31 12:05:08 | 显示全部楼层
在当前RXIF事件,清理RXIF标识位时同时给SLACKO置1,或者上一个RXIF事件接收完置1 ?
再不行上一个字节接受完加几个NOP总能把时间点卡在那个区间吧~
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:532
  • 最近打卡:2025-10-15 08:56:42
已绑定手机

47

主题

2274

回帖

7997

积分

论坛元老

积分
7997
发表于 2025-9-1 12:12:31 | 显示全部楼层
接收指定字节数据后设置NAK标志即可,附件例子供参考
  1.             if(Rx_Cnt >= 3)     //从机接收 4 个字节后返回 NAK
  2.             {
  3.                 I2CSLST |= 1;   //发送 NAK
  4.             }
  5.             RxBuffer[Rx_Cnt++] = I2CRXD;        //处理RECV事件(RECV DATA)
复制代码

截图202509011212003604.jpg

硬件I2C主从收发-STC8.zip

30.57 KB, 下载次数: 18

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:585
  • 最近打卡:2025-10-16 07:20:54
已绑定手机

86

主题

6276

回帖

1万

积分

超级版主

积分
11742
发表于 2025-9-1 12:36:46 | 显示全部楼层
可以声明一个变量用于计数,在该位置判断是否收到若干个字节,如是,设置SLACKO为1,下一个应答位就会发送NACK

截图202509011236107381.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-15 14:29:06
已绑定手机

18

主题

45

回帖

632

积分

高级会员

积分
632
发表于 2025-9-3 10:08:32 | 显示全部楼层
Debu*** 发表于 2025-9-1 12:36
可以声明一个变量用于计数,在该位置判断是否收到若干个字节,如是,设置SLACKO为1,下一个应答位就会发送N ...

我的思路就是这样子,不过不是放在rx_data = I2CRXD;的后面,而是放在了else if (I2CSLST & I2C_S_RXIF)代码块的中间,一直没起到想要的效果,和这个位置有关系吗?
花有重开日,人无再少年
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-15 14:29:06
已绑定手机

18

主题

45

回帖

632

积分

高级会员

积分
632
发表于 2025-9-3 10:09:27 | 显示全部楼层
乘风*** 发表于 2025-9-1 12:12
接收指定字节数据后设置NAK标志即可,附件例子供参考

谢谢你的回复,我也是这样处理的,但没起到效果,我对比下和你代码的差异
花有重开日,人无再少年
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:147
  • 最近打卡:2025-10-15 09:52:07
已绑定手机

18

主题

502

回帖

1726

积分

金牌会员

积分
1726
发表于 2025-9-3 11:42:44 | 显示全部楼层
从机不需要发送NACK信号,主机在接收最后一个字节后发送NACK,从机就释放总线了,主机可以结束了或重新开始
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-15 14:29:06
已绑定手机

18

主题

45

回帖

632

积分

高级会员

积分
632
发表于 2025-9-4 18:28:43 | 显示全部楼层
Ayb_*** 发表于 2025-9-3 11:42
从机不需要发送NACK信号,主机在接收最后一个字节后发送NACK,从机就释放总线了,主机可以结束了或重新开始 ...

我的是主机发送,从机接收,从机发送NACK提醒主机:从机暂时接收不了数据,主机先别发了
花有重开日,人无再少年
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:147
  • 最近打卡:2025-10-15 09:52:07
已绑定手机

18

主题

502

回帖

1726

积分

金牌会员

积分
1726
发表于 2025-9-5 08:29:32 | 显示全部楼层
zho*** 发表于 2025-9-4 18:28
我的是主机发送,从机接收,从机发送NACK提醒主机:从机暂时接收不了数据,主机先别发了 ...

你是主机,从机接收,从机数据线本身是释放的,你自己随时主动结束就可以了,主动权在你,从机怎么可能知道你要发多少数据呢
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-15 14:29:06
已绑定手机

18

主题

45

回帖

632

积分

高级会员

积分
632
发表于 2025-9-5 17:08:47 | 显示全部楼层
Ayb_*** 发表于 2025-9-5 08:29
你是主机,从机接收,从机数据线本身是释放的,你自己随时主动结束就可以了,主动权在你,从机怎么可能知 ...

主从机的代码都是我写,所以从机知道主机要发多少数据。从机每次都要接收主机发来的固定长度数据,然后处理数据,如果处理不对,就让主机等待,不要一直发。当前遇到的问题就是主机一直发,不管从机是否来得及处理,我的应对措施就是从机要是没处理完数据,就发NACK,主机收到NACK,就等待,不要一直发。
花有重开日,人无再少年
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 12:43 , Processed in 0.127064 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表