打印

CAN通信和唯一ID的困惑?

[复制链接]
1466|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaobq|  楼主 | 2019-11-4 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32F103+CAN通信,多个同样的板子都挂载CAN总线上,同样的程序和功能;上位机监控整个总线通信。
当有个板子发出信息时,上位机如何知道是那个板子发出的?
我们知道CAN的帧ID有 11bit 和29 bit 两种,数据位也只有8字节。
STM32F103本身具备唯一ID,但长度是12字节(96位)。
如果取唯一ID中的4字节作为设备ID,有ID重复的风险,另外12字节的唯一ID也不知道规律,不知道取哪些字节合适;
想过找个字节数少点的唯一ID元件,也没有找到;
如果每个板子都启用前配置一个ID号,写入FLASH中,难度和方案都可以,就是增加了一配置工作(联线、写入、ID号的维护)
请各位高手给我出出主意,如何处理这个问题:上位机判断一帧数据是谁发出来的,谢谢啦!

使用特权

评论回复

相关帖子

沙发
tyw| | 2019-11-4 14:55 | 只看该作者
板凳
gaobq|  楼主 | 2019-11-4 15:25 | 只看该作者
谢谢tyw,传经送宝!

使用特权

评论回复
地板
icecut| | 2019-11-4 17:33 | 只看该作者
哈哈哈, 我们都是搞个自动的配置管理器. 大家都把自己的唯一id报上来,我再给他们重新搞一个短id对应, 没必要人工配置.自动处理就好了.

使用特权

评论回复
5
haoyupei| | 2019-11-4 17:35 | 只看该作者
你的问题我们以前的项目正好涉及到,通过在扩展id的29位上做**,29位可以划分权限,区别类型,定义优先级,上位机收到id按照格式解析,可以准确定位下位机

使用特权

评论回复
6
ningling_21| | 2019-11-4 17:44 | 只看该作者
STM32发送自身ID号到上位机,上位机再根据ID号给STM32板编通信地址,类似USB设备枚举(却很简单)

使用特权

评论回复
7
R2D2| | 2019-11-4 19:51 | 只看该作者
不加配置你知道是那块板子发出来的数据???

使用特权

评论回复
8
Prry| | 2019-11-4 22:50 | 只看该作者
以前公司每个板子挂一个DS18B20,用它的唯一序列号

使用特权

评论回复
评论
icecut 2019-11-5 14:28 回复TA
土豪 
9
Ryanhsiung| | 2019-11-5 08:48 | 只看该作者
你是想做无需设置,没有办法。 ?? 网络里一下挂进来10个节点,我们怎么知道那个节点是那个节点呢?   
正常做法就是搞个设置ID的功能(或者拨码的)   ,

使用特权

评论回复
10
jackyhuang1988| | 2019-11-5 10:13 | 只看该作者
烧录的时候烧一个序列号进去就行了。程序里把序列号读出来

使用特权

评论回复
11
gaobq|  楼主 | 2019-11-5 13:56 | 只看该作者
向各位热心的朋友汇报一下,我最终选择了增加配置操作的方法,每块板子使用前独立挂到CAN接口上,使用软件写入一个8字节的序列号。序列号存储在FLASH片内存储区的最后一页。取序列号中的最后两个字节作为设备自身ID,这个ID嵌入发送数据时的ExtID中。

使用特权

评论回复
12
jazzyfox| | 2019-11-6 13:58 | 只看该作者
Prry 发表于 2019-11-4 22:50
以前公司每个板子挂一个DS18B20,用它的唯一序列号

这种办法也可以啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

804

帖子

5

粉丝