打印

请问各位看官及大神关于单线双向通信协议

[复制链接]
8288|17
手机看帖
扫描二维码
随时随地手机跟帖
沙发
yewuyi| | 2013-2-26 16:34 | 只看该作者
参考DS18B20数据手册。

也可百度one wire或者单总线协议内容。

都是公开的内容,没有啥保密。

使用特权

评论回复
板凳
dirtwillfly| | 2013-2-26 16:39 | 只看该作者
这方面资料网上比较少

使用特权

评论回复
地板
joyme| | 2013-2-26 17:13 | 只看该作者
dallas官网上资料比较全

使用特权

评论回复
5
tang221986|  楼主 | 2013-2-26 17:35 | 只看该作者
joyme 发表于 2013-2-26 17:13
dallas官网上资料比较全

请问有没有更详细的资料提示,太多了不太好找

使用特权

评论回复
6
zwz7219| | 2013-2-26 17:38 | 只看该作者
我可以给你一个思路,供你参考:

1:两个(或多个)单片机中,各自提供一个 I/O 口作为通讯用,在此公用端接一个上拉电阻。

2:通讯端口空闲时置为输入状态,通讯期间,高电平由外部的上拉电阻提供(端口仍置为输入状态),低电平时,端口转为输出状态,且设置为低电平。这是用于模仿“线与”,防止端口间电流短路。

3:所有单片机中有一个作为主机,用于发布指令,协调通讯。其它单片机(从机)不准主动发起通讯,除非被主机指定为“讲者”(象不象 USB)。

4:主从机间的通讯中,物理层协议是相同的,下面简要说明一下:

A:通讯以帧为单位,一帧可以包含多个字节的数据,这里以 8 个字节为例。

B:通讯发起方拉低总线 1600uS,发出帧起位,数据接收方收到此标志,表示一个新的数据帧将开始。

C:待发送的数据存在发送缓冲区中(一般是一个数组),发送时从第 1 个字节开始,至第 8 个字节。每一个字节从高位开始发送。共 64 位数据。

D:发送时,数据 0 由 400uS 的低电平和 800uS 的高电平组成;数据 1 由 800uS 的低电平和 400uS 的高电平组成。

E:一个数据帧的持续时间为 1600 + (400 + 800)* 64 = 78400uS,大约为 80mS,最少可以保证每 100mS 完成一次通讯,如果是双向通讯,可以保证每秒完成 5 次双向通讯。

F:发送完成后,发送方应置发送端口为输入状态,以释放总线。

5:通讯中的 8 个数据是透明的,协议设计者可以任意设定,如果是比较重要的通讯或环境干扰比较大的场合,可在最后一个或两个字节设置为校验数据(如校验和或 CRC)。剩下的字节用于传输控制数据或普通数据,具体内容由协议制定者裁决。

注意:
    一定要注意第 3 点,对于双机通讯,从机不能主动发送数据,一定要等到主机发送完成后,才可以向总线传输数据;如果是多机通讯,则必须被主机指定为“发言者”的从机才可以向总线传输数据。

    这个协议只适合数据量较少的通讯环境中,如果单片机的时钟足够高或任务不繁忙,上述时间值可按比例适当减少,以提高通讯速率。

使用特权

评论回复
7
refee| | 2013-2-26 17:40 | 只看该作者
本帖最后由 refee 于 2013-2-26 17:59 编辑

楼主参考一下

1-Wire软件资源指南和驱动程序说明.pdf

538.82 KB

使用特权

评论回复
评论
dirtwillfly 2013-2-26 21:03 回复TA
谢谢分享,我也学习下 
8
joyme| | 2013-2-26 17:44 | 只看该作者
看这个页面,找找你想要的
http://china.maximintegrated.com ... index.mvp/id/65#c65

使用特权

评论回复
9
tang221986|  楼主 | 2013-2-26 17:54 | 只看该作者
看了达拉斯的单总线,但是好像也是主从的方式,我是想如zwz7219所说, 如果自己定义一个单线双工通信,那么可靠性怎样保证

使用特权

评论回复
10
tang221986|  楼主 | 2013-2-26 18:00 | 只看该作者
通信速度除了使用高频的单片机,还有哪些方式,各位帅哥继续各种给力

使用特权

评论回复
11
zwz7219| | 2013-2-26 18:07 | 只看该作者
tang221986 发表于 2013-2-26 17:54
看了达拉斯的单总线,但是好像也是主从的方式,我是想如zwz7219所说, 如果自己定义一个单线双工通信,那么 ...

任何通讯,错误总是难免的,只是概率大小的问题。

如果只是“发现”错误,可以在数据中加入校验码(如奇偶、校验和、CRC等),发现错误抛弃这一帧数据;如果想“修复”数据中的错误,可对数据进行“交叉交织”,如果光盘中数据的处理方式。

使用特权

评论回复
12
lirunze| | 2013-2-26 18:54 | 只看该作者
路过下

使用特权

评论回复
13
fp123123| | 2013-2-26 23:46 | 只看该作者
D可以修改成这样,可靠性好一些

发送时,数据 0 由 30uS 的低电平表示,数据 1 由 100uS 的低电平表示,数据位之间由 50uS的高电平隔开

使用特权

评论回复
14
hopewise| | 2013-6-25 11:39 | 只看该作者
zwz7219
我采用定时中断,但不能保证从机每次都能接收到信号

使用特权

评论回复
15
coody| | 2013-6-25 11:45 | 只看该作者
我用单线半双工模拟串口

使用特权

评论回复
16
hopewise| | 2013-6-25 14:21 | 只看该作者
我用到2条线,1条作为输入脚,另一条为输出脚.coody你搞的能否100%可靠?

使用特权

评论回复
17
hopewise| | 2013-6-25 15:53 | 只看该作者
连发3次就搞定了双向MCU通信(模拟普通IO)

使用特权

评论回复
18
dongranmengming| | 2014-2-26 16:40 | 只看该作者
make

使用特权

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

本版积分规则

16

主题

122

帖子

0

粉丝