DPM 的串行通信协议
(Dilbertian 协议修改)
请注意协议名称
名称 “Dilbertiano” 来自本议定书的第一个版本, 我们叫 “国内流离失所者倒 Dilbertian 协议” (2010), 零出席与单元格 “关闭” 与单元格 “大” (“0” 瘦和 “1” 脂肪 – 按照以下的小插图来自 “呆伯特” 由 Scott Adams – www.dilbert.com).
因为新的协议 ?
Theremino 系统的目的是为 PC 提供简单的输入输出系统, 价格便宜,易于使用. 使它易于使用的自动编号都需要与它们的类型的识别, 链接的成本最小化,简化沟通是必要上只有一根电线.
有是一个类似的协议,我们不得不把它写. 当前版本收集最好的多年的实验和研究.
下载此文档 PDF 格式:
DPM_Protocol_2015_ENG.pdf
DPM_Protocol_2015_ITA.pdf
功能
- 单线双向串行通信.
- 自动配置.
- 自动检测连接的设备.
- 从设备的数量 1 只有在 200.
- 传输和接收的字节数取决于设备的类型.
- 传输速度达 4 兆比特每秒传输大量的数据与短电缆.
- 传输速度达 100 千比特每秒的长电缆 (高达 10 公里).
- 高效率的沟通 (之 10 只有在 20 在可以比大的倍).
电动百叶窗
对单一导线的传输发生, 但你需要一个参考质量和电源电压, 到哪里电线,通常是三个.
任何支持 DPM 的设备必须有一个输入的连接器 (对母版) 和一个输出到下游设备 (奴隶)
连接器通常使用的 3 政策, 与间距的 2.54 毫米.
关于通信链应该有一位主 (提供电源和计时) 和叶栅中连接的设备数 (称为奴隶).
主提供线的张力是 5 V, 与相同公差和相同的最大电流的 5 V,退出 USB 连接器.
主人可以提供的最大电流限制可以连接的设备的类型和数目. 这种电流, 通常是 250 但, 和可达的增加 500 但. 复习一下,会超出容量的 USB ’ 和会强加到连接器不寻常的特征.
可连接的设备的最大数目被有限的由以下因素:
– 最大电流, “硕士” 可以提供.
– 最大线熊在周期时间的水稻传输的字节数.
这两个 “硕士” 那 “奴隶” 连接到同一个阻尼电阻线, 它也作为一个低通, 无线电干扰和过电压保护. 这个电阻的值通常是从 33 只有在 330 欧姆
播放格式
使用非零返回格式 (非归零码) 标准.
默认格式 = 8, N, 1
– 1 起始位
– 8 数据位
– no-parity
– 1 停止位
水平的数据线 “Com。 线”
一旁的线到上一级 (3.3 V)
信号 “1” 用来表示 3.3 V
信号 “0” 用来表示 0 V
重复次数和吞吐量
传输速度
使用低速时的长度, 和这样的连接电缆的容量, 高. 当距离短和高速度可能用于与大量的设备进行通信 (或与需要大量字节的设备进行通信) 从建立命名速度 “1” (1 k 比特/秒) 高达 “12” (4 兆比特每秒)
最大字节数
根据波特率可以传输的字节的最大数目是下表中列出.
时间, 距离和的字节数
速度
|
位的时间
|
位
为
第二次
|
字节
每个 15女士 |
字节每
30女士 |
最大距离
|
最大容量
|
奴隶
最大
数量
|
1
|
1 女士
|
1K
|
1
|
3
|
10 公里
|
1 UF
|
3
|
2
|
500 我们
|
2K
|
3
|
6
|
5 公里
|
500 NF
|
6
|
3
|
200 我们
|
5K
|
4
|
8
|
2 公里
|
200 NF
|
15
|
4
|
100 我们
|
10K
|
15
|
30
|
1 公里
|
100 NF
|
30
|
5
|
50 我们
|
20K
|
30
|
60
|
500 m
|
50 NF
|
60
|
6
|
20 我们
|
50K
|
40
|
80
|
200 m
|
20 NF
|
150
|
7
|
10 我们
|
100K
|
150
|
300
|
100 m
|
10 NF
|
160
|
8
|
5 我们
|
200K
|
300
|
600
|
50 m
|
5 NF
|
80
|
9
|
2 我们
|
500K
|
400
|
800
|
20 m
|
2 NF
|
32
|
10
|
1 我们
|
1M
|
1500
|
3000
|
10 m
|
1 NF
|
16
|
11
|
500 NS
|
2M
|
3000
|
6000
|
5 m
|
500 PF
|
8
|
12
|
250_nS
|
4M
|
6000
|
12000
|
2.5 m
|
250 PF
|
4
|
所有设备必须至少都实现速度 “7” 这被认为是默认速度. 如果你想要设置不同于速度 “7” 链中的所有设备都必须都支持它.
的 “最大距离” 取决于电缆的特点, 表中的值被计算从屏蔽电缆 RG58 50 欧姆每米 100pF 的能力.
在低速度的数量 “奴隶” 可以传送的最大字节数受限制 30 毫秒. (每个奴隶使用至少一个字节和你声称的重复速度不够快,使流体运动)
高的速度,数目 “奴隶” 受到的最大容量的限制, 每个 “奴隶” 大约添加的能力 40..60 PF,大约减少了最大距离 50 厘米.
容量是根据每个 30pF 计算 “奴隶” 再加上其他 20pF 从连接电缆 20 厘米和其他 10pF 考虑到适当的附加阻力 “双边开关” (总计: 60PF)
最大电缆长度的通信比电源电流和电阻每米
电缆 类型 —>
最大电流
( 峰值电流 )
|
H1500/H1000/H500/H155/RG11
20 毫欧姆
或更少
每米
|
Rg58 /Rg59u/H155 /
网络电缆
关于
50 毫欧姆
每米
|
Rg59/RG6 /电话绞线 /
网络电缆
关于
100 毫欧姆
每米
|
10 但 | 1 公里 | 400 m | 200 m |
20 但 | 500 m | 200 m | 100 m |
50 但 | 200 m | 80 m | 40 m |
80 但 | 125 m | 50 m | 25 m |
100 但 | 100 m | 40 m | 20 m |
200 但 | 50 m | 20 m | 10 m |
400 但 | 25 m | 10 m | 5 m |
500 但 | 20 m | 8 m | 4 m |
800 但 | 12.5 m | 5 m | 2.5 m |
1 在 | 10 m | 4 m | 2 m |
距离的计算中,我们考虑到,电压跌落在地上, 不超过 200 MV. 在电源线上的电压降, 不会造成传输错误, 它还可以更高 (的 5 V 可以滴落下来 3.3 V 在不创建问题) 在地面上的屏蔽电缆的情况下是屏幕, 通常具有更少的阻力比申报, 这样的距离会更大.
电缆容量
值 “最大长度” 如上表所示是仅对连接电缆与承载力约有效 100 PF 每米. 下表显示的更正申请的最常用的电缆.
电缆
|
外部
直径
( 毫米 )
|
阻抗
( 欧姆 )
|
能力
(PF/吨。)
|
电阻
(毫欧
/ 米)
|
最大长度校正
|
H1500
|
15
|
50
|
80
|
4
|
x 1.25
|
H1000
|
10.3
|
50
|
80
|
11
|
x 1.25
|
Rg213
|
10.3
|
50
|
100
|
|
–
|
H500
|
9.8
|
50
|
82
|
15
|
x 1.22
|
H155
|
5.8
|
50
|
82
|
32
|
x 1.22
|
Rg8
|
10
|
52
|
90
|
|
–
|
Rg11 (电视)
|
10.3
|
75
|
60
|
21
|
x 1.7
|
RG59 (电视)
|
6.15
|
75
|
67
|
159
|
x 1.5
|
RG6_(电视坐)
|
6.8
|
75
|
51
|
100
|
x 2.0
|
在 RG56 / _(电视)
|
6.9
|
75
|
53
|
|
x 2.0
|
RG59/U _(电视)
|
4.5
|
75
|
53
|
45
|
x 2.0
|
Rg58
|
5.2
|
50
|
100
|
53
|
–
|
Rg142
|
4.95
|
50
|
96
|
|
–
|
Rg174
|
2.8
|
50
|
100
|
|
–
|
Rg178
|
1.85
|
50
|
95
|
|
–
|
Rg179
|
2.55
|
75
|
64
|
|
x 1.5
|
RG187
|
2.7
|
75
|
65
|
|
x 1.5
|
Rg188
|
2.7
|
50
|
95
|
|
–
|
Rg196
|
1.9
|
50
|
93
|
|
–
|
Rg316
|
2.5
|
50
|
95
|
|
–
|
网线
|
|
|
分钟 50
最大 130
|
分钟 60
最大 200
|
x 2.0
x 0.7
|
PC 音频电缆
|
|
|
分钟 120
最大 300
|
分钟 500
最大 3000
|
x 0.8
x 0.5
|
音器
电缆
|
|
|
分钟 60
最大 300
|
|
x 1.7
x 0.3
|
扭曲的电话线
|
|
|
50
|
100
|
x 2.0
|
那里还有低容量电缆 (少用,很难找到):
- Rg62 – 93 欧姆 – 44 PF/吨
- RG71 – 93 欧姆 – 44 PF/吨
- Rg210 – 93 欧姆 – 44 PF/吨
- RG63 – 125 欧姆 – 33PF/吨
- RG114 – 185 欧姆 – 27PF/吨
衡量一个未知的电缆的能力:
- 准备的完美的剥皮屏蔽的电缆和保留绝缘中央钢绞线.
- 测量之间中央和外盖有米或电容测量仪.
- 为了提高测量精度, 使用五个或十米长的电缆.
- 将皮法拉米电缆的数量来衡量其价值分为.
类型的设备
设备都带有一个数字从 0 只有在 199 找出她的"类型".
阶段的识别和编号的每个设备标识本身与这"类型".
目前定义以下设备:
设备类型
|
速度
分钟
|
最大速度
|
在出销
|
电源
|
名称
|
0
|
特别 “自定义” 类型
|
||||
1
|
1
|
12
|
1
|
12 但
|
电容式传感器
嗨质量
|
2
|
1
|
12
|
10
|
Inout 仆人
|
|
3
|
1
|
12
|
12
|
InOut 泛型
|
|
4
|
1
|
12
|
12
|
InOut
|
|
5
|
6
|
虚拟大师针脚
(第一版) |
|||
8
|
10
|
虚拟大师针脚 – V2
|
|||
9 | 12 | 虚拟大师针脚 – V4 | |||
255 | 未知 |
最大设备数
可连接的设备的最大数目被有限的:
– 最大可以根据选定的速度传送的字节数.
– "大师"可以提供最大电流 (通常 500 但)
– 议定书 》 所支持的设备的最大数目是 200 (之 0 只有在 199)
类型的 pin
别针被标记的数目 0 只有在 255 确定她"轴式".
输出 Pin 类型
输出插针
类型
|
名称
|
主人的奴隶
字节
|
奴隶对主人
字节
|
0
|
未使用
|
0
|
0
|
1
|
DIG_OUT
|
1
|
0
|
2
|
PWM_8
|
1
|
0
|
3
|
PWM_16
|
2
|
0
|
4
|
SERVO_8
|
1
|
0
|
5
|
SERVO_16
|
2
|
0
|
6 | 步进 | 4 | 0 |
7 | PWM_FAST | 5 | 0 |
输入的 Pin 类型
输入的引脚
类型
|
名称
|
主人的奴隶
字节
|
奴隶对主人
字节
|
129
|
DIG_IN
|
0
|
1
|
130
|
DIG_IN_PU
|
0
|
1
|
131
|
ADC_8
|
0
|
1
|
132
|
ADC_16
|
0
|
2
|
133
|
CAP_8
|
0
|
1
|
134
|
CAP_16
|
0
|
2
|
135
|
RES_8
|
0
|
1
|
136
|
RES_16
|
0
|
2
|
140
|
计数器
|
0
|
2
|
141
|
COUNTER_PU
|
0
|
2
|
142
|
FAST_COUNTER
|
0
|
2
|
143
|
FAST_COUNTER_PU
|
0
|
2
|
144
|
期间
|
0
|
4
|
145
|
PERIOD_PU
|
0
|
4
|
146
|
SLOW_PERIOD
|
0
|
4
|
147
|
SLOW_PERIOD_PU
|
0
|
4
|
150
|
USOUND_SENSOR
|
0
|
2
|
160
|
CAP_SENSOR
|
0
|
3
|
165
|
STEPPER_DIR
|
0
|
4
|
180
|
ENCODER_A
|
0
|
2
|
181
|
ENCODER_A_PU
|
0
|
2
|
182
|
ENCODER_B
|
0
|
0
|
183
|
ENCODER_B_PU
|
0
|
0
|
175
|
ADC_24
|
0
|
1
|
176
|
ADC_24_DIN
|
0
|
0
|
177
|
ADC_24_DOUT
|
0
|
0
|
主人和奴隶之间的通信 (串行线路)
第一个字节 | 类型的传输 | 传输 | 接收 |
255 (*4) | 特别延长 (为了将来的扩展) |
1 字节 (扩展) >>>>> 请参阅扩展动词表 <<<<< |
— |
254 (*1) | RecogStart 早期识别 和编号 |
1 字节 (数据字节数 = 0) 1 字节 (Cmd 的 CRC / 0) |
— |
253 (*2) | 分子识别和分析 输入序列号和请求的类型 |
1 字节 (数据字节数 = 1) 1 字节 (之 0 只有在 199) 1 字节 (启联资源中心的 Cmd/Nbytes/类型) |
1 字节 ( 类型 ) 1 字节 ( 启联资源中心 ) |
251 (*3) | FastDataExchange 快速数据交换. |
1 字节 (数据字节数 = 0) 1 字节 (启联资源中心的 Cmd/0) 之 0 只有在 60 个字节的数据 |
从 0 只有在 63 个字节的数据 |
249 (*4) | SetupSlavePins 输入设置 一针 “奴隶” |
1 字节 (奴隶索引) 1 字节 (数据的字节数) NN 字节 (PinTypes: 1 每个引脚的字节) 1 字节 (启联资源中心的 Cmd,SlaveId,等...) |
1 字节 (奴隶索引) 1 字节 (对字节的 CRC 上一页) |
248 (*4) | SetMasterName 输入的名称 “硕士” |
NN 字节 (名称由零终止字符) | — |
247 (*4) | GetMasterName 阅读的名称 “硕士” |
— | NN 字节 (字符的 零终止的名称) |
246 (*4) | SendValuesToSlave 发送 “n” 字节 一个奴隶 “m” (最大 56 字节) |
1 字节 (奴隶索引) 1 字节 (字节数) 字节 1 . . . 字节 n 1 字节 (启联资源中心 Cmd/SlaveId/nBytes/n) |
1 字节 (奴隶索引) 1 字节 (对字节的 CRC 上一页) |
245 (*4) | GetValuesFromSlave 请求 “n” 奴隶的字节 “m” (最大 56 字节) |
1 字节 (奴隶索引) 1 字节 (字节数) 1 字节 (启联资源中心的 Cmd/SlaveId/nBytes) |
byte1 . . 字节 n 1 字节 (奴隶索引) 1 字节 (儿童权利公约关于 n + 1 以前字节) |
244 (*4) | SendBytesToSlave 发送 “n” 奴隶的字节 “m” (最大 56 字节) |
1 字节 (奴隶索引) 1 字节 (字节数) 字节 1 . . . 字节 n 1 字节 (启联资源中心 Cmd/SlaveId/nBytes/n) |
1 字节 ( 奴隶索引 ) 1 字节 ( 启联资源中心 ) 对字节 上一页 |
243 (*4) | GetBytesFromSlave 请求 “n” 奴隶的字节 “m” (最大 56 字节) |
1 字节 (奴隶索引) 1 字节 (字节数) 1 字节 (启联资源中心的 Cmd/SlaveId/nBytes) |
字节 1 . . . 字节 n 1 字节 (奴隶索引) 1 字节 ( 启联资源中心 ) 关于 n + 1 以前字节 |
199 (*5) | SetSpeed | 1 字节 (国际信息通信展览会. 速度) 1 字节 (儿童权利公约关于 Cmd/通信速度) |
— |
0 | 没有行动 |
(*1) 服务命令.
(*2) 该命令仅用于由主人和奴隶分子识别和分析在识别.
(*3) 快速的通信 – 主交换所有奴隶使用只有一个 USB 交换的值
(*4) 通信命令到单一的奴隶
(*5) 特殊的命令
SendValuesToSlave 将值发送到输出引脚的奴隶 (物理形式上的大师或虚拟的奴隶,)
GetValuesFromSlave 从输入 Pin 的奴隶中读取值 (物理形式上的大师或虚拟的奴隶,)
SendBytesToSlave 发送泛型字节 (配置示例), 对奴隶 (物理形式上的大师或虚拟的奴隶,)
GetBytesFromSlave 法律一般字节 (例如的状态), 从一个奴隶 (物理形式上的大师或虚拟的奴隶,)
所有的命令都从代码 200 只有在 255, 以防止, 错误的情况, Id 和奴隶类型 (之 0 只有在 199) 可被解释为命令. (Setspeed 不算,因为它不会发送串行线,但仅由 ’ HAL, 对母版, 通过 usb 接口)
上位机与主服务器之间的通信 (USB)
Comandi da “主机” verso “硕士”
命令名称 | ID USB_TxData[0] |
参数 USB_TxData[1 对 n] |
RecogStart | 绑定, | Nbytes |
FastDataExchange | 绑定, | 从 0 自 60 数据字节 |
SetupSlavePins | 绑定, | SlaveId, Nbytes |
SetMasterName | 绑定, | MasterName (零终止) |
GetMasterName | 绑定, | – |
SendValuesToSlave | 绑定, | SlaveId, Nbytes, Byte1….ByteN |
GetValuesFromSlave | 绑定, | SlaveId, Nbytes |
SendBytesToSlave | 绑定, | SlaveId, Nbytes, Byte1….ByteN |
GetBytesFromSlave | 绑定, | SlaveId, Nbytes |
SetSpeed | 绑定, | CommSpeed |
Risposte da “硕士” verso “主机”
命令名称 | 响应 USB_RxData[0] |
返回值 USB_RxData[1 对 n] |
RecogStart | 0 = 确定 | Nslaves, 奴隶 Type1 … 奴隶类型 N |
FastDataExchange | 0 = 确定 | 从 0 自 63 数据字节 |
SetupSlavePins | 0 = 确定 | – |
SetMasterName | 0 = 确定 | – |
GetMasterName | 0 = 确定 | 主控形状名称 (零终止) |
SendValuesToSlave | 0 = 确定 | – |
GetValuesFromSlave | 0 = 确定 | 字节 1 … N 字节 |
SendBytesToSlave | 0 = 确定 | – |
GetBytesFromSlave | 0 = 确定 | 字节 1 … N 字节 |
SetSpeed | 0 = 确定 | – |
USB 缓冲区的零位置指示是否从执行了该命令 “硕士” 成功.
CRC 的计算
使用的所有 CRC 都计算超过一定数量的连续字节和 CRC 结果是一个字节. 使用一种基于"纵向冗余校验"算法的 CRC 计算.
纵向冗余校验
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
Next
为了避免世俗的序列之间的"碰撞" ( 例如, 0000 = 1111 或 123 = 321 ) 和生产有效 CRC 的简单序列 ( 例如, 0000 与 CRC = 0 ) 上述方法被修改与置换.
计算 CRC 结果是有效和非常简单.
本议定书中使用的 CRC 的计算
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
CRC = CRC + 1
Next
设置波特率
如果你决定要使用非默认的波特率, 然后"大师"应该传达给链中的所有设备的新的速度.
此设置使循环设备识别之前甚至应该是可能和必须也有可能很长输电线路. 因此那里是一个特殊的命令,现在所示.
1 – 主处理器就维护的高线 50 女士
2 – 所有的奴隶绝对处于挂起的一个字符
3 – 主生成中断 (低位线 12 咬住了最低速度
4 – 主问题 55 字符 (01010101) 所需的波特率
5 – 所有的奴隶推断从这个字节的波特率 (自动波特率)
6 – 主服务器将发送指定的"速度"的一个字节 (之 1 只有在 12)
7 – 主服务器将发送一个字节的 CRC 计算的两个字节 (cmd/速度)
8 – 如果奴隶是一个错误,不会改变它的速度
检查波特率
如果你设置太高速度的输电线路在使用某些设备链中的可能不能够支持的速度设置和传输数据时,可能会发生错误.
如果传输错误是零个或更少比 0.1% 然后速度设置无效.
识别和编号
1 – 主输出到奴隶的整个序列的"速度"设置,以确保所有沟通以相同的速度.
2 – 主人是不会传染到命令 50 毫秒.
3 – 在这一点上所有的奴隶 应 等待命令.
4 – 主问题代码"254″ (RecogStart).
5 – 他们把弱拉向上的所有奴隶 (100-400 UA) 在输入输出和打开到下游设备的输出连接. 他们不再回应任何命令除了"253″ (分子识别和分析).
6 – 主问题代码"253″ (类型请求) 然后一个编号为 0 字节″, 链中的第一个设备满足与它的类型的字节, 删除上拉, 连接到下游的奴隶,不响应任何命令.
7 – 主问题代码"253″ (类型请求) 然后一个编号为 1 字节″, 链中的第二个设备满足与它的类型的字节, 删除上拉, 连接到下游的奴隶,不响应任何命令.
8 – 主问题代码"253″ (类型请求) 然后一个数字"2 字节″,
9 – 主人对奴隶问题所有设置序列"速度", 这表明所有的奴隶在正常通信模式.
10 – 主人让我通知主机 (PC) 通过 USB 奴隶确认数量和类型的每个.
Roberto_Cena & Livio_Cicala (2010 – 2016)