martonmiklos/robomow_city120_reveng
GitHub: martonmiklos/robomow_city120_reveng
记录 Robomow City 120 机器人的硬件与通信协议逆向工程成果,涵盖 UART 协议、引脚定义、硬件架构及固件分析。
Stars: 6 | Forks: 0
# Robomow RL-2000 (City 120) 机器人与用户终端通信的通用参数
* 终端中的 PIC 与机器人中的 H8S/2000 之间的电平为 0-5V
* 19200 波特率,8n1,反转(UART 空闲时为低电平)
* 校验和:将所有字节相加后取反
* 关于 RJ12 引脚排布,请参阅[逆向工程原理图](https://github.com/martonmiklos/robomow_city120_reveng/blob/master/robomow_city120_terminal.sch)
J105 引脚排布:
RX1: 4
TX1: 5
RX0: 2
TX0: 3
GND: 8
# 终端响应数据包
终端会周期性地发送以下数据包(速率在 10-60ms 之间变化,具体取决于来自机器人的通信流量)。
我从没见过 TX 和 RX 上同时有数据传输(终端和机器人似乎在总线上进行握手)。
```
* Idle: 0x23 0x00 0x18 0xC4
* Forward: 0x23 0x40 0x18 0x84
* Backward: 0x23 0x80 0x18 0x44
* Left: 0x23 0x10 0x18 0xB4
* Right: 0x23 0x20 0x18 0xA4
* Rabbit: 0x23 0x00 0x19 0xC3
* C: 0x23 0x08 0x18 0xBC
* Go: 0x23 0x04 0x18 0x44
* Stop: 0x23 0x00 0x1A 0xC2
* Factory: 0x23 0x00 0x1C 0xC0
* Up: 0x23 0x01 0x18 0xC3
* Down: 0x23 0x02 0x18 0xC2
```
# 硬件逆向工程信息
我目前有以下电路板:
* ESB0019B04 - 已损坏
* ESB0050D - 已损坏
* ESB0100D - 可能是新的
## H8S MCU 模式配置
配置为 Mode 5
- MD0 VCC
- MD1 GND
- MD2 VCC
## I2C EEPROM
SDA - P53
SCL - P52
## 外部 RAM
64KByte
## 电机电流限制
分流器连接到 LM393,其输出通过 74HC153 多路复用器读取,具体的映射关系待定 (TBD)
# 固件逆向信息
## RAM
### 内部 RAM
在 0xFFF400 到 0xFFFC00 之间存在 2K 的片上 RAM
### 外部 RAM
128K x 8
- ESB0019B04 - V62C5181024LL-35W
- ESB0050D Samsung K6X1008C2D-BF-55
- ESB0100D Cypress CY62128LL
外部 RAM 的内容是从 flash 中分多部分进行初始化的
- ROM 0x01007E-0x0101F2 拷贝到 RAM 0x221140-0x2212B4 (372 byte)
- ROM 0x010570-0x0113A8 拷贝到 RAM 0x2212B4-0x2220EC (3640 byte)
## UART 0
UART0 连接到终端,具有 31 byte 的 RX 缓冲区
### UART 1
UART1 被初始化为 4800 波特率(F_CPU == 16M, BRR1 == 103),波特率可以通过一些命令进行调整。
在物理层面上,这个 UART 连接到这个接口:

UART1 似乎具有更简单的协议,它可能参与了 bootloader/flashing/config 上传活动(在一种情况下它以 "DownLoad..." 字符串结束)。
### UART1 协议信息
以下信息是通过在 IDA 中分析 4.33 City-120 固件收集的。
由于 DownLoad 字符串带来的风险,从未进行过测试。
0. byte:
如果为 0xAA - 处理第 6. byte
如果为 0x83, 0x87, 0x89 - 下一个 byte 必须是 'm'
如果为 0xC4 - 处理第 3. byte
如果为 0x68 - (ascii 'h') 则激活某种
1. byte: 如果不是 'm' (0x6D),则重置对 0x83, 0x87, 0x89 的处理
2. byte
如果为 0x83, 0x87,则进入某段引向 DownLoad 字符串的代码区。
3. byte
如果为 0xC5 - 继续处理
其他 - 重置数据包处理
4. byte
如果为 0xC7 - 执行 BIST
5. byte
itt meghívódik egy komolyabb függvény
6. byte
eltároljuk -> 7.re
标签:串口通信, 云资产清单, 固件分析, 客户端加密, 机器人, 物联网, 硬件分析, 逆向工程