1, printenv

8197F# printenv
baudrate=38400
ethact=eth0
ethaddr=00:00:00:81:97:f0
fileaddr=a0a00000
filesize=2bdf2
ipaddr=192.168.1.6
serverip=192.168.1.55
stderr=serial
stdin=serial
stdout=serial

Environment size: 189/65532 bytes

查看网络互通性

8197F# ping 192.168.1.100
Using eth0 device
host 192.168.1.100 is alive

1,tftpput

8197F# tftpput 0xa0a00000 0x40000 192.168.1.100:uboot.bin
Using eth0 device
TFTP to server 192.168.1.100; our IP address is 192.168.1.6
Filename 'uboot.bin'.
Save address: 0xa0a00000
Save size:    0x40000
Saving: #################
         3.4 MiB/s
done
Bytes transferred = 262144 (40000 hex)

2,tftpboot


8197F# tftpboot 0xa0a00000 192.168.1.100:boot.bin
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.6
Filename 'boot.bin'.
Load address: 0xa0a00000
Loading: #############
         4.5 MiB/s
done
Bytes transferred = 179698 (2bdf2 hex)

3, 烧写测试
sf erase 0x0 0x40000
将下载的 uboot.bin 写入 Flash 起始位置
sf write 0xa0a00000 0x0 0x40000

两个分区查看


8197F# md.b 0xa0000000 
a0000000: a9 8c 31 95 ff ff eb bf 7f fb ff ff ff ff ff f7    ..1.............
a0000010: ff ff ff ff ff df ef df ff ff ff ff ff ff ff ff    ................
a0000020: ff ff ff ff ff ff ff ff ff fb ff ff ff ff ff ff    ................
a0000030: ff ff ef ff ff ff fd ff ff ff ff ff ff ff ff fd    ................


8197F# md.b 0x80000000 
80000000: a9 8c 31 95 ff ff eb bf 7f fb ff ff ff ff ff f7    ..1.............
80000010: ff ff ff ff ff df ef df ff ff ff ff ff ff ff ff    ................
80000020: ff ff ff ff ff ff ff ff ff fb ff ff ff ff ff ff    ................
80000030: ff ff ef ff ff ff fd ff ff ff ff ff ff ff ff fd    ................


读出boot.bin整个镜像

8197F# sf probe
flash vendor: EON
tangtao@SF: Detected EN25QX128A with page size 256 Bytes, erase size 64 KiB, total 16 MiB

8197F# sf read 0xa0a00000 0x0 0x40000
SF: 262144 bytes @ 0x0 Read: OK

8197F# tftpput 0xa0a00000 0x40000 192.168.1.100:boot_read.bin
Using eth0 device
TFTP to server 192.168.1.100; our IP address is 192.168.1.6
Filename 'boot_read.bin'.
Save address: 0xa0a00000
Save size:    0x40000
Saving: #################
         1.8 MiB/s
done
Bytes transferred = 262144 (40000 hex)

地址范围 缓存 (Cache) 用途 访问速度
KSEG0 0x8000_0000 ~ 0x9FFF_FFFF 带缓存 (Cached) 正常运行代码、数据
KSEG1 0xA000_0000 ~ 0xBFFF_FFFF 无缓存 (Uncached) 寄存器、设备、早期启动 慢、稳定

1,缓存差异(最重要)
KSEG0:走 Cache,速度快,但DDR 初始化前不能用。
KSEG1:不走 Cache,直接读写物理地址,DDR 初始化前也能用。
2. 与你之前的 boot.bin/u-boot.bin 关系
boot.bin (SPL):
运行在 KSEG1(因为 DDR 还没初始化,不能用缓存)
u-boot.bin:
运行在 KSEG0(DDR 已初始化,开启 Cache 加速)
3. 地址换算公式(超级实用)
物理地址 0xXXXXXXX ↔ 虚拟地址
KSEG0 虚拟地址 = 物理地址 + 0x80000000
KSEG1 虚拟地址 = 物理地址 + 0xA0000000

8197F# bdinfo
arch_number = 0x00000000
boot_params = 0x80000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x08000000
ethaddr     = 00:11:22:33:44:55
ip_addr     = 192.168.1.10
baudrate    = 38400 bps
relocaddr   = 0x80F80000
reloc off   = 0x80F80000
fdt_blob    = 0x80F80000
sp          = 0x80F7EF10
flashstart  = 0xBC000000
flashsize   = 0x01000000
flashoffset = 0x00000000

示例操作

1. 查看 DDR 起始 64 字节内容

md 0x80000000 40   # 显示 64 字节(每行 16 字节)

2. 查看 Flash 起始 256 字节内容(通过 KSEG1 访问,绕过缓存)

md.b 0xBC000000 100   # 显示 256 字节

3. 比较内存中两份数据(例如验证写入)

cmp.b 0x80000000 0x81000000 0x1000

4. 向 DDR 写入测试数据

mw.l 0x80010000 0xdeadbeef 10   # 向 0x80010000 写入 10 个字

5. 将 Flash 内容读到内存

# 从 Flash 地址 0xBC000000(虚拟)读取 256KB 到内存 0x80020000
cp.b 0xBC000000 0x80020000 0x40000

 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐