【君正T31实战指南】Nor_Flash烧录全流程解析
1. 环境准备认识你的“战场”与“武器”拿到君正T31开发板第一件要紧事就是把程序“烧”进去让它活起来。这个“烧”不是用火而是把编译好的二进制文件比如Uboot、内核、文件系统写入到板载的Nor Flash芯片里。Nor Flash你可以理解成开发板的“硬盘”系统从这里启动和运行。今天咱们不聊虚的就手把手带你走通三种最常用的烧录路子保证你不管在什么环境下都能把板子“点亮”。在动手之前你得先搞清楚手头有什么“武器”。首先确认你的T31开发板它通常自带一个SPI接口的Nor Flash容量可能是16Mb、32Mb或更大。其次你需要一根Micro USB线用来连接电脑和板子的调试串口这是你和板子“对话”的窗口。最后在你的电脑上需要一个串口终端工具比如Putty、MobaXterm或者SecureCRT波特率一般设置为115200。这些是基础就像做饭前先备好锅碗瓢盆。然后你得准备好“弹药”——也就是要烧录的文件。通常来自SDK编译输出最重要的三个文件是u-boot-with-spl.bin系统的引导程序相当于电脑的BIOS负责最基础的硬件初始化和加载内核。uImageLinux内核镜像系统的核心。rootfs.xxx根文件系统里面包含了系统运行所需要的各种库、工具和你的应用程序格式可能是squashfs、jffs2等。把这些文件放在你电脑上一个容易找到的目录里比如~/t31_burn/。好了准备工作做完咱们就进入正题看看哪种烧录方法最适合你现在的处境。2. 方法一网络TFTP传输烧录最常用、最高效这是我个人最推荐也是日常开发调试中使用频率最高的方法。它的核心思路非常简单先把要烧录的大文件通过网络快速传到开发板的内存里然后再从内存写入到速度相对较慢的Nor Flash中。这就像搬家先用大卡车网络把所有家具运到楼道里内存再一件件搬进房间Nor Flash效率比用小推车直接远距离搬运高得多。2.1 搭建TFTP服务器要实现这个操作你需要在你的电脑或者同一局域网内的另一台机器上启动一个TFTP服务器。TFTP是一种简单的文件传输协议Uboot原生支持。在Ubuntu系统下安装和配置非常容易sudo apt-get install tftpd-hpa安装后编辑配置文件/etc/default/tftpd-hpaTFTP_USERNAMEtftp TFTP_DIRECTORY/var/lib/tftpd # 这是TFTP服务的根目录你可以改成自己喜欢的路径 TFTP_ADDRESS:69 TFTP_OPTIONS--secure --create记得把你准备好的u-boot-with-spl.bin等文件拷贝到TFTP_DIRECTORY指定的目录下例如/var/lib/tftpd。然后重启服务sudo systemctl restart tftpd-hpa确保你的开发板和电脑在同一个网段。你可以用网线直连或者连接到同一个路由器。在Uboot命令行里用setenv设置好开发板的IP和服务器IPsetenv ipaddr 192.168.1.100 # 开发板IP setenv serverip 192.168.1.50 # 你的电脑TFTP服务器IP saveenv # 保存设置2.2 分步烧录与合并烧录实战现在进入实战环节。给开发板上电在串口终端里快速敲回车进入Uboot命令行模式。第一种是分步烧录适合单独更新某个部件比如只升级Uboot。操作非常直观# 第一步清理出一块内存区域准备接货 mw.b 0x80600000 0xff 0x1000000 # 从地址0x80600000开始清理出16MB空间填充为0xff # 第二步通过网络TFTP把Uboot镜像“拉”到刚清理的内存里 tftp 0x80600000 u-boot-with-spl.bin # 从服务器下载文件到内存地址 # 第三步操作Nor Flash芯片 sf probe # 探测并初始化SPI Nor Flash sf erase 0x0 0x40000 # 擦除Flash从0地址开始大小为256KB的区域Uboot通常放在这里 sf write 0x80600000 0x0 0x40000 # 将内存0x80600000开始的数据写入Flash的0地址写入长度0x40000256KB擦除是必须的因为Nor Flash写入前必须先擦除变成全1而擦除单位通常比较大一个扇区。sf write命令的最后两个参数分别是Flash的偏移地址和写入数据的长度需要根据你文件的实际大小和分区规划来调整。第二种是合并烧录适合首次烧录整个系统或者批量生产。思路是把所有文件先按顺序加载到内存的连续区域然后一次性写入Flash。这需要你提前规划好内存布局和Flash分区表。假设你的分区规划是Uboot在0x0256KB内核在0x400002MB根文件系统在0x2400008MB。操作如下# 清理一大块连续内存 mw.b 0x80600000 0xff 0x800000 # 清理8MB内存足够放下所有镜像 # 按顺序加载各个镜像到内存指定偏移地址 tftp 0x80600000 u-boot-with-spl.bin # Uboot放在内存起始位置 tftp 0x80640000 uImage # 内核紧接Uboot之后偏移0x40000 tftp 0x808c0000 rootfs.squashfs # 根文件系统放在更后面偏移0x8c0000 tftp 0x80ac0000 appfs.jffs2 # 应用文件系统继续往后放 # 一次性擦除Flash上需要写入的整个区域 sf probe sf erase 0x0 0x800000 # 擦除Flash前8MB空间 # 一次性将内存中这8MB数据写入Flash sf write 0x80600000 0x0 0x800000注意这种方法的精髓在于地址计算。tftp加载时的内存地址偏移必须和sf write时Flash的地址偏移对应起来。你需要清楚每个文件的大小确保它们加载到内存时不会互相覆盖并且写入Flash的地址要符合你系统中内核驱动所定义的分区表。算错了地址系统肯定启动不了。3. 方法二SD卡启动烧录无网络环境的救星当你处在一个没有网络交换机的环境或者开发板的网络口还没调通的时候TFTP就用不了了。这时候一张小小的SD卡就是你的救命稻草。这个方法的核心是让开发板从SD卡启动一个临时的Uboot然后用这个Uboot去读取SD卡里的镜像文件并烧录到板载的Nor Flash中。3.1 制作可启动的SD卡关键步骤这个方法的第一步稍微有点绕但只做一次。你需要制作一张特殊的SD卡它有两个功能第一能被T31识别并从它启动第二它的存储空间能被正常访问以存放文件。a. 分区与格式化把SD卡插入电脑假设识别为/dev/sdb。首先卸载它sudo umount /dev/sdb*然后使用fdisk进行分区。这里有个关键技巧我们要在SD卡的开头预留大约1MB的空间用来存放启动代码。sudo fdisk /dev/sdb在fdisk的交互命令行中依次输入o # 创建新的DOS分区表 n # 新建分区 p # 选择主分区 1 # 分区号选1 2048 # 起始扇区设为2048非常重要这意味着跳过了前面的2048*5121MB空间 回车 # 结束扇区默认到卡的最后使用全部剩余空间 w # 写入并退出分区完成后格式化这个分区为FAT32格式这样Uboot才能识别sudo mkfs.vfat /dev/sdb1b. 写入SD卡启动引导程序接下来需要把T31专门用于从SD卡启动的Uboot镜像写入到SD卡开头的预留区域。这个镜像和烧到Nor Flash的u-boot-with-spl.bin是同一个但写入位置不同。# 进入你编译好uboot的目录 dd ifu-boot-with-spl.bin of/dev/sdb bs1024 seek17这条命令的意思是以1024字节为块大小将u-boot-with-spl.bin文件写入到/dev/sdb整个SD卡不是分区并且跳过开头的17KBseek17。这个17KB的偏移量是T31芯片从SD卡启动时固件约定的加载地址必须严格遵守。3.2 通过SD卡烧录Nor Flash制作好SD卡后把你要烧录的所有文件u-boot-with-spl.bin,uImage,rootfs.jffs2等都拷贝到SD卡的FAT32分区里。然后将SD卡插入开发板设置拨码开关为SD卡启动模式具体请参考你的开发板手册上电。同样在启动瞬间按回车进入Uboot命令行。现在这个Uboot是从SD卡运行的。我们可以用它来操作板载的Nor Flash了。首先查看SD卡里有哪些文件fatls mmc 0你会看到刚才拷贝进去的文件列表。然后流程就和TFTP非常像了只是加载文件的命令换成了fatload# 清理内存 mw.b 0x80600000 0xff 0x1000000 # 从SD卡mmc 0加载Uboot镜像到内存 fatload mmc 0 0x80600000 u-boot-with-spl.bin # 烧录到Nor Flash sf probe sf erase 0x0 0x40000 sf write 0x80600000 0x0 0x40000用同样的方法可以依次加载并烧录内核和文件系统。这个方法虽然比网络TFTP慢一点SD卡读写速度限制但在没有网络的场景下是唯一可靠的本地烧录方案特别适合现场调试或生产烧录。4. 方法三系统运行时在线更新灵活安全前面两种方法都是在Uboot阶段进行的我们称之为“离线烧录”。而第三种方法则是在Linux系统完全启动之后在文件系统里进行操作可以称为“在线烧录”或“运行时更新”。这种方法特别适合只更新应用程序、配置文件或者替换某个内核模块而无需触动整个系统。4.1 原理与准备工作当Linux系统启动后内核的MTDMemory Technology Device子系统会识别到Nor Flash并将其划分为多个分区在/dev/下生成对应的设备节点比如/dev/mtd0、/dev/mtd1等。每个分区对应一个MTD设备。我们可以像操作普通文件一样对这些设备节点进行读写前提是需要有对应的工具。你需要准备mtd-utils工具集其中最关键的两个命令是flash_erase和flashcp或者直接用dd。如果你的文件系统里没有可以从SDK里编译或者通过包管理器安装如果支持的话。通常我们需要通过网络NFS或U盘将这些工具和要更新的文件拷贝到设备上。4.2 在线烧录操作步骤假设我们要更新一个应用程序分区对应的是/dev/mtd5。第一步擦除目标分区。这是必须的而且我强烈建议在擦除前先通过cat /proc/mtd命令确认好分区信息千万别擦错了尤其是根文件系统分区。flash_erase /dev/mtd5 0 0这条命令的含义是擦除设备/dev/mtd5从第0个擦除块开始擦除0个块这里的0是个特殊值代表擦除整个设备。擦除过程可能会花几秒到十几秒。第二步写入新的数据。我们可以使用dd命令这是最通用的方法。dd if/path/to/your/new_app.bin of/dev/mtd5 bs4096这里bs4096设置块大小为4KB通常能获得较好的写入性能。写入完成后你可以用md5sum对比一下原文件和写入后读取出来的数据确保一致性。重要提示在线烧录存在一定风险。如果正在更新的分区包含系统运行所必需的程序或库更新可能会导致系统瞬间崩溃。因此我通常只用它来更新非关键的数据分区或备用内核分区。对于Uboot和正在运行的内核分区绝对不要在系统运行时进行写操作。一种更安全的做法是准备两个根文件系统分区A和B系统从A启动在线更新B分区的内容然后通过修改启动参数下次重启时切换到B分区启动。这就是所谓的A/B系统更新可靠性高很多。5. 三种方法对比与选型指南讲了这么多你可能有点晕到底该用哪种别急我画个表帮你理清思路再分享点我的实战经验。特性方法一网络TFTP烧录方法二SD卡烧录方法三系统在线更新适用场景开发调试阶段、有网络环境、频繁烧录无网络环境、首次烧录、生产烧录、现场维护系统已启动、局部更新App/配置、A/B系统更新速度快依赖网络速度百兆/千兆网络优势明显中受SD卡读写速度限制慢受Flash本身写速度和系统负载影响便利性高文件在服务器随时可换中需准备SD卡拷贝文件高在系统内直接操作类似文件拷贝安全性中操作在Uboot下刷错可能变砖中同左但SD卡本身可作为恢复媒介低误操作易导致运行中系统崩溃复杂度低命令简单流程固定中需制作启动卡步骤稍多低命令简单但需清楚分区结构我的个人经验与选型建议如果你是刚拿到板子第一次烧录毫不犹豫选择方法二SD卡启动烧录。这是最稳妥的“从零开始”方案。哪怕网络没配通、串口没反应只要SD卡制作正确就能把Uboot烧进去打通后续所有环节。如果你在实验室或办公室进行日常开发方法一网络TFTP是你的最佳搭档。我习惯在电脑上开一个TFTP目录编译完镜像直接丢进去然后在Uboot里一条tftp命令拉下来就烧效率极高。配合脚本甚至可以做到一键编译烧录。如果你需要更新已上市设备上的某个功能方法三在线更新是唯一选择。但务必做好安全设计比如使用双备份分区更新前校验文件完整性更新后自动重启并回滚的机制。千万不要在毫无保护的情况下直接dd写关键分区。关于“变砖”的补救无论用哪种方法误操作比如擦除了正在运行的Uboot都可能导致板子无法启动。这时候SD卡烧录法是最后的救命稻草。只要你的SD卡启动引导程序还在就可以通过它重新烧写Nor Flash。所以那张制作好的SD卡请务必妥善保管它就是你开发板的“急救包”。烧录本身是个熟练工多练几次把地址偏移、分区大小这些概念理清楚自然就轻车熟路了。最怕的就是一知半解照着教程输入命令却不知道为什么一旦出错就束手无策。希望这篇啰嗦的指南不仅能让你知道怎么操作更能明白背后的道理真正玩转君正T31的Nor Flash烧录。

相关新闻

使用Transformers库加载DeepSeek-R1-Distill-Qwen-1.5B

使用Transformers库加载DeepSeek-R1-Distill-Qwen-1.5B

使用Transformers库加载DeepSeek-R1-Distill-Qwen-1.5B 1. 引言 如果你对AI大模型感兴趣,想在自己的电脑上运行一个轻量级的语言模型,DeepSeek-R1-Distill-Qwen-1.5B是个不错的选择。这个模型只有15亿参数,相比那些动辄千亿参数的大模型&am…

2026/7/3 4:15:04 阅读更多 →
MusePublic Art Studio开源镜像价值:安全加固版(无外连、无遥测)

MusePublic Art Studio开源镜像价值:安全加固版(无外连、无遥测)

MusePublic Art Studio开源镜像价值:安全加固版(无外连、无遥测) 1. 为什么你需要这个安全加固版镜像 如果你正在寻找一个既强大又安心的AI艺术创作工具,MusePublic Art Studio的安全加固版可能就是你的最佳选择。这个版本解决了…

2026/7/3 5:04:32 阅读更多 →
Z-Image-Turbo LoRA镜像开箱即用:Docker部署+Supervisor进程管理教程

Z-Image-Turbo LoRA镜像开箱即用:Docker部署+Supervisor进程管理教程

Z-Image-Turbo LoRA镜像开箱即用:Docker部署Supervisor进程管理教程 想快速搭建一个能生成亚洲美女风格图片的AI服务吗?今天介绍的Z-Image-Turbo LoRA镜像,让你在10分钟内就能拥有一个功能完整的图片生成Web服务。这个镜像不仅预装了强大的Z…

2026/5/17 4:32:20 阅读更多 →

最新新闻

AH85101同步降压24V 输入、5~24V 可调 3A

AH85101同步降压24V 输入、5~24V 可调 3A

一、描述l35-3806-7573v同步芯片AH85101同步降压24V 输入、5~24V 可调 3A,AH85101是一款高效、单片式同步降压DC/DC转换器,支持4.6V至30V输入,输出3.3V至25V,具有3A连续电流输出、高效率、多种保护功能及广泛应用。AH85101配备短路…

2026/7/3 5:03:21 阅读更多 →
2026云手机和模拟器区别 安卓云手机原生特点

2026云手机和模拟器区别 安卓云手机原生特点

大量用户混淆本地PC安卓模拟器与云端ARM云手机,二者在硬件底座、运行机制、资源供给、长效托管能力存在底层技术鸿沟。本文从指令集架构、资源承载模式、环境隔离、离线运行、图形渲染五大维度拆解两类产品核心差异,完整梳理ARM原生安卓云手机独有的技术…

2026/7/3 5:03:21 阅读更多 →
鼠标性能终极测试:如何用免费开源工具精准评估你的鼠标表现

鼠标性能终极测试:如何用免费开源工具精准评估你的鼠标表现

鼠标性能终极测试:如何用免费开源工具精准评估你的鼠标表现 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mou/MouseTester 你是否在游戏中总感觉鼠标"飘"得厉害?或者工作时鼠标指针不够精准?别…

2026/7/3 5:01:20 阅读更多 →
单例模式 超详细完整版

单例模式 超详细完整版

一、单例模式是什么?单例模式(Singleton) 是创建型设计模式。 核心定义: 保证一个类在整个程序运行中,有且仅有一个实例对象,并提供一个全局访问入口。二、单例模式三大核心特点(必背&#xff0…

2026/7/3 4:59:20 阅读更多 →
口碑出众的精准尺寸烤盘定制厂家

口碑出众的精准尺寸烤盘定制厂家

做工业化烘焙生产的技术和采购人员都懂,烤盘尺寸哪怕只有1mm的误差,放到自动化隧道炉、连续生产线上就容易出现卡盘、跳盘问题,轻则耽误生产进度,重则刮坏传输设备、提升产品报废率,因此找到靠谱的烘焙器具定制厂家&am…

2026/7/3 4:59:20 阅读更多 →
基于STM32的智能手环设计与实现

基于STM32的智能手环设计与实现

摘要:为满足对人体基础生理信息与日常活动状态的综合监测需求,设计了一套基于STM32的智能手环系统。系统以STM32F103C8T6为控制核心,结合MAX30102心率血氧传感器、DS18B20温度传感器、ADXL345加速度传感器、OLED显示屏、按键、蜂鸣器及ESP826…

2026/7/3 4:57:19 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻