某10

Powerless

Motorola Advisor Pager 串口通信解析

Motorola Advisor 的串口通信不像是常见串口设备的命令/响应模式,而像是一个固定的步骤流程。
在与设备同步后必须按照固定步骤发送和接收数据。以下是详细步骤解析:


通信方向定义

  • => 上位机到设备
  • <= 设备到上位机

串口通信维护流程(协议)

上位机首先需要循环发送 0xAA 并等待设备响应 0x32,即为同步完成,可以开始执行流程。
注:设备响应的 0x32 对应的 ASCII 为数字 2,可能是型号或者固件版本?

  1. => 维护配置: {F0, F1, F2, F3} (4 字节)F0-F3 定义请查看后面的“维护配置定义”。
  2. <= 设备状态:T/B/N/P/D(1 字节) 状态解释请查看后面的“设备状态表”。
  3. <= Inventory Control Number(10 字节) 只有设置了 F0.bit1 才会返回。
  4. <= Serial Number (10 字节)只有设置了 F0.bit0 才会返回。
  5. => 发送密码 (10 字节,不足部分用空格补齐)只有设备处于 P 状态才需要发送密码。
  6. <= 如果密码正确或无需密码(N 状态),会返回 0xbb。

    • 密码错误时,会返回重试计数(0x01~0x08)当计数达到 0x08 时,设备进入 D 状态。
    • 密码错误时,设备将复位,当前流程将结束,需要重新同步开始新一轮通信。
    • 密码正确时不会自动清除重试计数器,需要手动修改 codeplug。
  7. 发送要执行的代码,长度为 F3*2。发送完设备会自动按照 F2 设置的地址执行代码

维护配置定义

F0 位域定义:

位功能值说明
bit0请求 Inventory Control Number1=请求请求返回库存控制编号
bit1请求 Serial Number1=请求请求返回序列号
bit2–bit4未使用——
bit5结束流程1=结束结束通信流程并进入默认运行模式
bit668HC05 RAM1 映射1=RAM
0=用户 ROM
地址范围 $0100–$017F
bit768HC05 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
阅读更多

A1706 820-01375 AMS983 JC01-0 逆向

J形排线上包含一些用于保护 IO 的 ESD 器件,一颗猜测是存储固件或者配置的 NOR SPI FLASH 和一颗 STOD32A AMOLED供电芯片。

将这跟J形排线去除阻焊层扫描正反面后,结合 A1706 的原理图分析得到这根排线大致的连接器定义。
STOD32A 没有公开的 datasheet (只有Data brief), 一番搜索发现 SGM3833A 应该可以直接替换它,这部分定义就来自于它的 datasheet。

在此感谢 yukidama 的工作,本文内容部分参考了它的 schlitzblende 项目。

阅读更多