Motorola Advisor Pager 串口通信解析
Motorola Advisor 的串口通信不像是常见串口设备的命令/响应模式,而像是一个固定的步骤流程。
在与设备同步后必须按照固定步骤发送和接收数据。以下是详细步骤解析:
通信方向定义
- => 上位机到设备
- <= 设备到上位机
串口通信维护流程(协议)
上位机首先需要循环发送 0xAA 并等待设备响应 0x32,即为同步完成,可以开始执行流程。
注:设备响应的 0x32 对应的 ASCII 为数字 2,可能是型号或者固件版本?
- => 维护配置: {F0, F1, F2, F3} (4 字节)F0-F3 定义请查看后面的“维护配置定义”。
- <= 设备状态:T/B/N/P/D(1 字节) 状态解释请查看后面的“设备状态表”。
- <= Inventory Control Number(10 字节) 只有设置了 F0.bit1 才会返回。
- <= Serial Number (10 字节)只有设置了 F0.bit0 才会返回。
- => 发送密码 (10 字节,不足部分用空格补齐)只有设备处于 P 状态才需要发送密码。
<= 如果密码正确或无需密码(N 状态),会返回 0xbb。
- 密码错误时,会返回重试计数(0x01~0x08)当计数达到 0x08 时,设备进入 D 状态。
- 密码错误时,设备将复位,当前流程将结束,需要重新同步开始新一轮通信。
- 密码正确时不会自动清除重试计数器,需要手动修改 codeplug。
- 发送要执行的代码,长度为 F3*2。发送完设备会自动按照 F2 设置的地址执行代码
维护配置定义
F0 位域定义:
| 位 | 功能 | 值 | 说明 |
|---|---|---|---|
| bit0 | 请求 Inventory Control Number | 1=请求 | 请求返回库存控制编号 |
| bit1 | 请求 Serial Number | 1=请求 | 请求返回序列号 |
| bit2–bit4 | 未使用 | — | — |
| bit5 | 结束流程 | 1=结束 | 结束通信流程并进入默认运行模式 |
| bit6 | 68HC05 RAM1 映射 | 1=RAM 0=用户 ROM | 地址范围 $0100–$017F |
| bit7 | 68HC05 RAM0 映射 | 1=RAM 0=用户 ROM | 地址范围 $0020–$004F |
F1: RAM 加载地址,上位机下发的代码会被写入到这个地址。
F2: 执行入口地址
F3: 待接收代码长度,以半字为单位(字节数 = F3 * 2)
设备状态表
| 状态 | 含义 | 判断条件 |
|---|---|---|
| T | 测试,u2 通信错误? | codeplug[0] != 0xe2 && send_u2_command(0x8e) != 0xc1 |
| B | 空白,codeplug 为空 | codeplug[0] != 0xe2 && send_u2_command(0x8e) == 0xc1 |
| N | 无密码 | codeplug[0] == 0xe2 && codeplug[37].bit5 == 0 |
| P | 有密码,需要密码才能加载并执行代码。如果密码重试次数过多,将进入 D 状态 | codeplug[0] == 0xe2 && codeplug[37].bit5 == 1 && codeplug[37].bit3 == 0 |
| D | 禁用,设备被锁定无法使用,无法通过串口维护流程解锁 | codeplug[0] == 0xe2 && codeplug[37].bit5 == 1 && codeplug[37].bit3 == 1 |
标签: 无标签