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 连接到这个接口: ![RnD UART](https://static.pigsec.cn/wp-content/uploads/repos/cas/2d/2de444cdb1c9c8cf2f386bd75c93629a92f92d176e79cf5fe1fc2def13fac52c.png) 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
标签:串口通信, 云资产清单, 固件分析, 客户端加密, 机器人, 物联网, 硬件分析, 逆向工程