Adelzu/sainsmart-240x128-m0517-open-firmware
GitHub: Adelzu/sainsmart-240x128-m0517-open-firmware
为 SainSmart 240×128 串口 LCD 提供开源替换固件,将其从仅支持文本的设备转变为支持完整图形绘制的 framebuffer 显示器。
Stars: 1 | Forks: 0
# SainSmart 240×128 (Nuvoton M0517 / T6963C) 串口 LCD 的开源固件
替换固件,将 SainSmart **240×128 TTL 串口矩阵图形 LCD**(由与 **T6963C / RA6963** 图形控制器通信的 **Nuvoton M0517** 驱动)转变为真正的 **framebuffer 显示器** —— 通过简单的串口协议实现任意的 **图形、文本、位图和反转**。
SainSmart 的原厂固件只能实现 *定位文本和清屏*,波特率仅为 9600,不支持图形和反转,而且没有文档。本项目对该开发板进行了逆向工程,**解锁了被安全锁定的 M0517**,并刷入了你可以完全控制的开源固件 —— 只需使用一个 **$0 的 Arduino 作为编程器**(无需 ST-Link 或 Nu-Link)。
## 你将获得
| | SainSmart 原厂固件 | 本固件 |
|---|---|---|
| 文本 | ✅ 定位字符 | ✅(在主机端渲染,支持任意字体) |
| **图形**(像素、线条、形状、位图) | ❌ | ✅ |
| **反转** / 反色显示 | ❌ | ✅ |
| 协议 | 无文档的 `8A A8 …`,9600 波特率 | **有文档的** 帧协议,最高 57600 波特率 |
| 模型 | 你发送文本命令 | 你发送 **完整的 240×128 帧** |
M0517 变成了一个 **framebuffer 接收器**:主机(ESP32、Arduino、PC 或 ESPHome 节点)渲染 240×128 的图像并通过 UART 串流;固件将其传输至 T6963C。所有的绘图操作都在主机上进行,因此你可以免费使用主机的整个图形技术栈。
## 适用硬件
- **SainSmart 240×128 TTL 串口矩阵图形 LCD**(SKU 约 101‑60‑223;有白底蓝字版出售)。载板包含一个 **Nuvoton M0517**(NuMicro M051 系列,Cortex‑M0,LQFP48),LCD 模块则采用 **RAiO RA6963 / Toshiba T6963C** 控制器。
- 识别你的设备:串口/载板上只有一个独立的 ARM 芯片 + 玻璃屏上的 T6963C 级控制器,一个 3 针 `+V`/`G`/`SD/RX` 串口接口,以及一个小的 ICP 接口。参见 [docs/HARDWARE.md](docs/HARDWARE.md)。
## 快速开始
你需要一个 **Arduino(任意 5V 开发板 — Uno/Nano/Mega)** 作为 SWD 编程器,以及一个主机来驱动显示器(示例中为 **ESP32**)。
1. **将 Arduino 连接到 M0517 的 ICP 接口**(SWDIO/SWCLK/nRESET/GND),并将 ESP32 连接到显示器的 `SD/RX`。完整引脚说明:[docs/FLASHING.md](docs/FLASHING.md)。
2. **将编程器草图** `flasher/m0517_flash/` 烧录到 Arduino。它已经内置了固件镜像(`fw_image.h`),因此仅用于刷写时**无需 ARM 工具链**。
3. 在 115200 波特率下打开串口监视器,确认 `IDCODE=0x0BB11477` / `SWD link OK`,然后发送 **`F`** —— 它将执行芯片擦除(解锁)、编程、校验,并设置启动配置。
4. **重新给显示器开发板上电。** 它将启动新固件。
5. 将 `examples/esp32_display_client/` 烧录到你的 ESP32,观察它绘制图形并切换反转效果。
详细步骤(包括如何解读安全状态门):**[docs/FLASHING.md](docs/FLASHING.md)**。
## 文档
| 文档 | 内容 |
|---|---|
| **[docs/FLASHING.md](docs/FLASHING.md)** | 完整刷写指南:接线、Arduino 编程器、擦除→编程→校验、恢复 |
| **[docs/PROTOCOL.md](docs/PROTOCOL.md)** | 串口协议 v1:帧封装、CLEAR/FRAME/INVERT、framebuffer 位布局、波特率 |
| **[docs/HARDWARE.md](docs/HARDWARE.md)** | 详尽的 M0517↔T6963C 引脚映射、串口/ICP 接口、电平裕量决定的波特率上限 |
| **[docs/UNLOCK.md](docs/UNLOCK.md)** | 如何清除安全锁(无文档的 FMC 寄存器)+ 致谢 |
## 仓库布局
```
firmware/ the M0517 firmware (bare-metal C) + vendored Nuvoton M051 BSP + build.sh
prebuilt/m0517_display.bin <- ready-to-flash image (ST-Link/OpenOCD users)
flasher/ Arduino sketch that programs the M0517 over bit-banged SWD (no ST-Link needed)
examples/ esp32_display_client -- a worked host that draws graphics + invert
docs/ protocol, hardware, flashing, unlock
```
## 构建固件(可选)
大多数人不需要这样做 —— 仓库已经包含了一个预编译的镜像。如果需要重新构建,你需要安装 [Arm GNU Toolchain](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads)(`arm-none-eabi-gcc`);Nuvoton M051 BSP 已经内置在仓库中:
```
cd firmware && ./build.sh # -> firmware.bin (~3.7 KB flash, well under the 64 KB / 4 KB device)
cd ../flasher/m0517_flash && ./gen_fw_image.sh # regenerate the embedded image
```
## 许可证
本项目自身的代码和文档基于 **MIT** 许可证授权 —— 见 [LICENSE](LICENSE)。`firmware/bsp/` 下的内置 Nuvoton M051 BSP 保留其原有的 **Apache‑2.0** 许可证;见 [NOTICE](NOTICE)。
*本文档由 Claude (Anthropic) 共同编写。*
标签:Arduino, LCD显示屏, Nuvoton, 云资产清单, 单片机, 客户端加密, 嵌入式固件, 逆向工程