找回密码
 立即注册
查看: 1450|回复: 19

请教I2C通信问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-13 17:26:41 | 显示全部楼层 |阅读模式
向各位大侠请教I2C通信问题:
1、用STC的单片机通过I2C总线组网,大家有自动分配从机地址的解决方案吗?

2、假设I2C总线网络中有多个主机,各主机可以收到其它主机发送的广播数据吗?
3、STC32G.h头文件中,以下有关主机状态的定义在什么情况下使用?
  1. <div>#define MS_IDLE                     0x00
  2. #define MS_START                    0x01
  3. #define MS_SENDDAT                  0x02
  4. #define MS_RECVACK                  0x03
  5. #define MS_RECVDAT                  0x04
  6. #define MS_SENDACK                  0x05
  7. #define MS_STOP                     0x06
  8. #define MS_START_SENDDAT_RECVACK    0x09
  9. #define MS_SENDDAT_RECVACK          0x0a
  10. #define MS_RECVDAT_SENDACK          0x0b
  11. #define MS_RECVDAT_SENDNAK          0x0c</div>
复制代码

感谢!




图.png
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-2-13 17:48:00 | 显示全部楼层
截图202402131747559835.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-2-13 17:48:27 | 显示全部楼层
截图202402131748248675.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-13 18:06:43 | 显示全部楼层

MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。

点评

如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动仲裁发送,但是地址仍然是需要我们给指配的  详情 回复 发表于 2024-2-13 19:25
需要自行设计从机地址切换,且外部有其他手段指定地址。 讲一个简单的流程。首先是一个主机,其他都是从机。从机地址都是0x00且开启地址匹配。 此时主机发送地址,所有从机都能收到。从机方面有其他手段(例如一个按  详情 回复 发表于 2024-2-13 19:23
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-2-13 19:23:08 | 显示全部楼层
FL_*** 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...

需要自行设计从机地址切换,且外部有其他手段指定地址。
讲一个简单的流程。首先是一个主机,其他都是从机。从机地址都是0x00且开启地址匹配。
此时主机发送地址,所有从机都能收到。从机方面有其他手段(例如一个按键),保存当前地址并且转入设定的地址。这样主机给每个从机制定完成地址后,就可以正常和从机通讯了。
如果想要全自动实现,首先就是逻辑上的不通顺。如何知道分配的地址是否重叠?如何判断地址和芯片的对应关系?所以还是需要手动的,上面这个流程只能简化修改程序的步骤,可以让所有从机都下载一个程序。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-2-13 19:25:11 | 显示全部楼层
FL_*** 发表于 2024-2-13 18:06
MA对广播数据不起作用,主机向广播地址0x00发送的数据,所有从机都可以收到。 ...

如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动仲裁发送,但是地址仍然是需要我们给指配的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-14 11:19:03 | 显示全部楼层
设想的注册流程如图所示
流程图.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-14 11:21:15 | 显示全部楼层
流程成功的关键在于:I2C主机模式下能否收到其它主机模式MCU广播的数据。

点评

STC的MCU主机模式无法接收其他主机数据。 只有在从机模式才能发送数据。 如果想要实现你所述的这种效果,可以关闭IIC状态,通过模拟IIC主机仲裁来使能当前设备使用主机还是从机模式。 具体实现可以是使用随机的延时  详情 回复 发表于 2024-2-14 11:35
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-14 11:23:02 | 显示全部楼层
王*** 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...

不是全主机模式
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-03-02 13:13:00

2

主题

11

回帖

146

积分

注册会员

积分
146
发表于 2024-2-14 11:35:07 | 显示全部楼层
王*** 发表于 2024-2-13 19:25
如果想要全是主机进行地址传送,也就是所有的设备优先级都一致。建议使用can总线通讯,硬件层实现了自动 ...

柜内模块数据交互用CAN有点浪费,设想的是柜内用I2C,柜外有线用CAN

点评

这样的话还是需要自行实现一下IIC主机设备总线仲裁  详情 回复 发表于 2024-2-14 11:42
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:40 , Processed in 0.132683 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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