Files
ku5p_ccsds122_datamover_uart/ccsds122_storage.srcs/scripts/uart_terminal.md

161 lines
4.7 KiB
Markdown
Raw Normal View History

# uart_terminal.py 命令参考
## 用法
```bash
python uart_terminal.py --port COM3 [--baud 2000000]
```
## 寄存器地址表
| 地址 | 名称 | 类型 | 说明 |
|------|------|:--:|------|
| 0x80000000 | CTRL | R/W | [0]=enable, [3:1]=target_bpp |
| 0x80000004 | IMG_ADDR | R/W | 原始图像 DDR 地址 |
| 0x80000008 | IMG_LEN | R/W | (保留) |
| 0x8000000C | CMPR_ADDR | R/W | 压缩输出 DDR 地址 |
| 0x80000010 | STATUS | RO | [0]=busy, [1]=compress_done |
| 0x80000014 | CMPR_LEN | RO | 总压缩字节数 |
| 0x80000018 | VERSION | RO | 模块版本号 |
| 0x8000001C | STORAGE_MODE | R/W | 存储模式 1/2/3 |
| 0x80000020 | MEM_BLOCK_SZ | R/W | 内存块大小 (128 or 64 MB) |
| 0x80000024 | PAN_BYTES | RO | PAN 压缩字节数 |
| 0x80000028 | B1_BYTES | RO | B1 压缩字节数 |
| 0x8000002C | B2_BYTES | RO | B2 压缩字节数 |
| 0x80000030 | B3_BYTES | RO | B3 压缩字节数 |
| 0x80000034 | B4_BYTES | RO | B4 压缩字节数 |
| 0x80000038 | TOTAL_BYTES | RO | S2MM 总字节 (aux+压缩) |
| 0x8000003C | IMG_PER_REGION | R/W | 每区域最大图像数 (0=不限) |
## DDR 地址表
| 地址范围 | 说明 |
|---------|------|
| 0x00000000 - 0x07FFFFFF | 原始图像 DDR (128MB) |
| 0x00000000 | PAN 图像起始 (96MB, stride=12288) |
| 0x06000000 | B1 图像起始 (6MB, stride=3072) |
| 0x06600000 | B2 图像起始 |
| 0x06C00000 | B3 图像起始 |
| 0x07200000 | B4 图像起始 |
| 0x07800000 | 辅助数据起始 |
| 0x07FFF000 | 元数据 (mode + 5×row_count, big-endian) |
| 0x40000000 | 压缩输出 DDR |
## 命令全类型
### 1. 读寄存器 — `r`
```
r <addr>
```
| 示例 | 说明 |
|------|------|
| `r 0x80000018` | 读 VERSION |
| `r 0x80000010` | 读 STATUS — 同时解码 busy/done 位 |
| `r 0x80000000` | 读 CTRL — 同时解码 enable/bpp 位 |
| `r 0x80000024` | 读 PAN_BYTES |
### 2. 写寄存器 — `w`
```
w <addr> <data>
```
| 示例 | 说明 |
|------|------|
| `w 0x80000000 0x00` | CTRL=0 (清除 enable) |
| `w 0x80000000 0x01` | CTRL=1, bpp=0 (触发无损压缩) |
| `w 0x80000000 0x05` | CTRL=1, bpp=2 |
| `w 0x80000004 0x00000000` | IMG_ADDR=0 |
| `w 0x8000000C 0x40000000` | CMPR_ADDR=0x40000000 |
| `w 0x80000020 128` | MEM_BLOCK_SZ=128MB |
| `w 0x80000020 64` | MEM_BLOCK_SZ=64MB |
| `w 0x8000001C 1` | STORAGE_MODE=1 (PAN+B1~B4) |
| `w 0x8000001C 2` | STORAGE_MODE=2 (仅PAN) |
| `w 0x8000001C 3` | STORAGE_MODE=3 (仅B1~B4) |
| `w 0x8000003C 1` | IMG_PER_REGION=1 (每行1幅) |
| `w 0x8000003C 0` | IMG_PER_REGION=0 (不限) |
### 3. 读全部寄存器 — `dump`
```
dump
```
一次性读取全部 16 个寄存器并显示,含 STATUS/CTRL 解码。
### 4. 读 DDR — `ar`
```
ar <addr> <len> → 屏幕 hex dump
ar <addr> <len> <file> → 保存到文件
```
| 示例 | 说明 |
|------|------|
| `ar 0x07FFF000 32` | 读元数据 32 字节,屏幕输出 |
| `ar 0x00000000 512` | 读 PAN 第 1 行 |
| `ar 0x06000000 512` | 读 B1 第 1 行 |
| `ar 0x40000000 1024` | 读压缩输出 1KB屏幕输出 |
| `ar 0x40000000 4096 out.bin` | 读压缩输出 4KB存到 out.bin |
### 5. 写 DDR — `aw`
```
aw <addr> <file> → 从文件写入
aw <addr> hex:<hexstr> → 从 hex 字符串写入
```
| 示例 | 说明 |
|------|------|
| `aw 0x00000000 pan.bin` | 将 pan.bin 写入 DDR 地址 0 |
| `aw 0x07FFF000 hex:000000010000010000000100000001000000010000000100` | 写元数据 (24字节 hex) |
| `aw 0x00000000 hex:08000000` | 手动写 upload 帧头 128MB |
| `aw 0x06000000 hex:AABBCCDD` | 写 4 字节到 B1 起始地址 |
### 6. 其他
| 命令 | 说明 |
|------|------|
| `help` | 显示帮助 |
| `quit` / `exit` / `q` | 退出 |
## 上板完整操作流程
```
# 1. 配寄存器
uart> w 0x80000000 0x00 # CTRL=0
uart> w 0x80000004 0x00000000 # IMG_ADDR=0
uart> w 0x8000000C 0x40000000 # CMPR_ADDR=0x40000000
uart> w 0x80000020 128 # MEM_BLOCK_SZ=128
uart> w 0x8000001C 1 # STORAGE_MODE=1
uart> w 0x8000003C 1 # IMG_PER_REGION=1
# 2. 写元数据
uart> aw 0x07FFF000 hex:000000010000010000000100000001000000010000000100
# 3. 写图像数据 (PAN 第 0 行)
uart> aw 0x00000000 pan_row0.bin
# 4. 触发
uart> w 0x80000000 0x01 # enable=1
# 5. 轮询
uart> r 0x80000010 # STATUS → busy=1 → 等几秒 → 再读
uart> r 0x80000010 # STATUS → busy=0, done=1
# 6. 看结果
uart> dump # 全寄存器
uart> ar 0x40000000 1024 # 读压缩开头 1KB
```
## 协议对照
| 命令 | UART 协议 | 字节数 |
|------|----------|--------|
| `r` | `R` + 4B addr BE | 5 |
| `w` | `W` + 4B addr BE + 4B data BE | 9 |
| `ar` | `D` + 4B addr BE + 4B len BE | 9 |
| `aw` | `A` + 4B addr BE + 4B len BE + data | 9 + len |