ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

嵌入式开发板完整使用流程:从环境搭建到烧录验证的六步闭环

嵌入式开发板完整使用流程:从环境搭建到烧录验证的六步闭环 1. 什么是“完整的开发板使用流程”它到底在解决什么问题“完整的开发板使用流程”这八个字乍看平平无奇但对刚踏入嵌入式世界的工程师、高校学生、创客甚至转行的开发者来说它背后是一整套环环相扣、容错率极低的实操闭环。我带过三届嵌入式实训班每年都有至少三分之一的学员卡在“能点亮LED但跑不起来完整应用”的临界点上——不是不会写代码而是根本不清楚从拿到一块裸板开始到最终让自己的程序稳定运行在目标硬件上中间究竟要走哪几步、每一步为什么必须这么走、哪一步出错会导致后续全盘失效。这个流程本质上是在解决软硬件协同落地的最后一公里问题。它不单是“烧进去就完事”而是覆盖了环境准备→工具链构建→代码编译→镜像生成→烧录验证→调试定位六个不可跳过的阶段。比如你搜到的“keil5 烧录失败”90%不是keil本身的问题而是前期交叉编译生成的bin文件地址偏移不对再比如“esp32烧录overlap”表面是烧录工具报错根源往往是链接脚本里flash分区定义和实际烧录命令指定的地址区间发生了重叠还有“imx6ull开发板中文乱码”问题不在屏幕驱动而在于交叉编译时glibc的locale支持没打开导致终端无法解析UTF-8字节流。你看到的热搜词里“合宙air202 s6开发板线序26排针引脚”、“t113开发板”、“axu15egp系列”这些具体型号说明用户已经脱离了理论阶段手握真实硬件急需可执行的路径而“env工具链”、“ubuntu-20.04安装qt交叉编译环境”、“linux下交叉编译strongswan”这些关键词则暴露出一个普遍痛点工具链不是装上就能用而是需要与目标芯片架构、内核版本、C库版本严格匹配。ARMv7和ARMv8的指令集差异、glibc 2.28和2.31的ABI兼容性、Qt 5.9.9和5.12.10对OpenSSL的依赖版本……任何一个参数错位都会导致编译通过但运行崩溃或者烧录成功但串口无输出。所以“完整流程”不是教你怎么敲命令而是帮你建立一套可追溯、可复现、可诊断的工程化思维。它让你明白为什么要在Ubuntu 20.04而不是22.04上搭建Qt交叉环境因为官方预编译工具链只适配GCC 9.3而22.04默认GCC 11.2为什么“dd键鼠”这种看似无关的词会混进热搜因为部分开发板如Rock 5B的eMMC烧录本质就是用dd命令向/dev/mmcblk0写入镜像而键盘鼠标映射错误常导致烧录后无法操作为什么“liberoeda工具如何烧录代码”和“jlink烧录”并存前者面向FPGA SoC后者面向MCU底层烧录机制完全不同但用户常误以为“烧录”是统一动作。这套流程是把碎片化知识缝合成一张网让你面对任何新开发板都能快速拆解出“我该先确认什么、再验证什么、最后盯住哪个日志”。2. 流程设计的底层逻辑为什么必须是这六步跳过任何一环都会踩坑2.1 环境准备不是装系统而是构建可信基线很多人把“环境准备”简单理解为“装个Ubuntu虚拟机”。这是最大的认知偏差。真正的环境准备核心目标是建立一个与目标硬件生态完全对齐的、最小化的、可审计的构建环境。它包含三个硬性约束第一操作系统发行版与工具链的强绑定。以你提到的“ubuntu-20.04安装qt交叉编译环境”为例Qt官方提供的arm-linux-gnueabihf-gcc工具链如qt-everywhere-src-5.12.10/configure -xplatform linux-arm-gnueabihf-g明确要求宿主机GCC版本≤9.3。Ubuntu 20.04默认GCC 9.3.0而22.04默认GCC 11.2.0。如果你强行在22.04上用源码编译相同工具链会因libstdc ABI不兼容在链接阶段报错“undefined reference to __cxa_throw_bad_array_new_length”。这不是bug而是C标准库二进制接口的演进断层。我实测过同样的源码在20.04上编译出的可执行文件在22.04宿主机上甚至无法运行ldd命令——因为动态链接器找不到对应版本的libstdc.so.6。第二依赖包的精确版本控制。比如“linux下交叉编译strongswan”其configure脚本会检测host系统中pkg-config的版本。strongswan 5.9.8要求pkg-config ≥ 0.29而Ubuntu 18.04自带的是0.29.120.04是0.29.1但某些国内镜像源会提供0.29.2的更新包。看似小版本升级却可能导致configure误判glib版本最终编译出缺少crypto插件的二进制。解决方案不是升级pkg-config而是用apt install pkg-config0.29.1-0ubuntu2锁定版本并用apt-mark hold pkg-config防止被自动升级。第三硬件连接的物理层校验。热搜词里的“合宙air202 s6开发板线序26排针引脚”直指这一环节。Air202使用EC20模块其UART0用于AT指令通信UART1用于下载固件但排针定义与标准杜邦线颜色不一致例如TXD实际对应排针第4脚而非习惯性的第2脚。我见过太多人用万用表量了三天才发现自己一直把USB转TTL模块的RXD接到了开发板的TXD上——结果当然是“烧录失败”。正确做法是上电前用万用表二极管档测量开发板上标有“GND”的焊盘与USB转TTL模块的GND是否导通应为0Ω再测TXD与RXD之间是否开路应为OL确认无短路最后对照官方PDF手册逐脚核对排针丝印编号与模块引脚定义。这一步耗时5分钟却能避免后续80%的通信类故障。提示环境准备阶段的交付物不是“系统装好了”而是三份文档①env-check.sh脚本自动检测GCC、Python、pkg-config等版本并比对白名单②hardware-pinout.pdf标注实测的排针功能与电压③docker-compose.yml将整个环境打包为Docker镜像确保团队成员零差异复现。2.2 工具链构建交叉编译不是“换个gcc”而是重建整个软件栈“交叉编译工具链”这个词被过度简化了。它绝非只是arm-linux-gnueabihf-gcc这个可执行文件而是一个包含编译器gcc、汇编器as、链接器ld、C运行库glibc/uClibc/musl、二进制工具binutils、调试器gdb的完整集合。其构建逻辑取决于目标芯片的三大属性CPU架构ARM/ARM64/RISC-V、ABIEABI/HF/AAPCS、操作系统内核Linux/RTOS。以你搜索的“t113开发板”为例全志T113是ARM Cortex-A7双核运行Linux 5.4内核要求工具链支持ARMv7-A指令集、硬浮点VFPv3-D32、GNU EABI。此时若错误选用aarch64-linux-gnu-gccARM64工具链编译会通过但生成的ELF文件头标识为EM_AARCH64而T113内核只识别EM_ARM导致exec format error。正确选择是arm-linux-gnueabihf-gcc其中gnueabihf明确表示GNU EABI Hard Float。更隐蔽的陷阱在C库。glibc体积大、功能全但启动慢musl轻量、启动快但缺少部分POSIX扩展。“esp32-p4烧录报错”中若用glibc编译的应用尝试调用getaddrinfo_a异步DNS而目标ESP32-P4 SDK基于newlib就会在运行时崩溃。解决方案是在CMakeLists.txt中强制指定-DCMAKE_C_FLAGS-O2 -marchrv32imac -mabiilp32 -ffunction-sections -fdata-sections并链接SDK自带的libnet80211.a而非系统glibc。工具链构建的实操路径只有两条方案A推荐新手使用预编译工具链。如Linaro发布的gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz解压即用。优点是经过大规模测试缺点是版本固定无法定制。方案B推荐量产项目用crosstool-ng自建。执行ct-ng arm-cortexa9-linux-gnueabihf生成配置模板修改CT_KERNEL_VERSION5.4.19、CT_LIBCglibc、CT_LIBC_GLIBC_VERSION2.31再ct-ng build。全程耗时约40分钟但可精确控制每个组件版本且生成的config.log是故障排查的黄金线索。注意工具链的sysroot目录如arm-linux-gnueabihf/sysroot必须与编译命令中的--sysroot参数严格一致。我曾因忘记在Makefile中添加--sysroot$(TOOLCHAIN)/arm-linux-gnueabihf/sysroot导致编译时找不到stdio.h却误以为是头文件路径配置错误折腾两天才发现是sysroot缺失。2.3 代码编译从源码到可执行文件中间隔着链接脚本代码编译阶段新手常陷入“只要make不报错就算成功”的误区。实际上编译成功仅意味着语法正确而链接成功才代表内存布局合理。链接脚本Linker Script是此阶段的灵魂它决定了代码段.text、数据段.data、未初始化数据段.bss在目标内存中的绝对地址。以“imx6ull-alientek-emmc.dtb 编译好设备led”为例正点原子的IMX6ULL开发板使用eMMC作为主存储其启动流程要求BootROM从eMMC的0x0扇区读取SPLSecondary Program LoaderSPL加载u-boot到DDR的0x80000000u-boot从eMMC的0x800扇区读取kernelzImage到0x80800000kernel从eMMC的0x2000扇区读取dtb设备树到0x83000000。如果dtb编译时未指定正确的-b参数如dtc -I dts -O dtb -b 0x83000000 imx6ull-alientek-emmc.dts生成的dtb头部仍保留默认的0x10000000加载地址u-boot在启动时会将其加载到错误位置导致kernel找不到设备树最终卡在“Starting kernel ...”不动。另一个高频问题来自“esp32烧录地址”。ESP32的flash布局由gen_esp32part.py工具生成默认分区表partition_table.csv定义# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, factory, app, factory, 0x10000, 0x1e0000,这意味着应用程序必须烧录到0x10000地址。若在Arduino IDE中误选“Flash Mode: QIO”但实际硬件是DIO或在esptool.py中指定--flash_mode dio却写成qio就会因SPI指令不匹配导致烧录后程序跳转到非法地址。实操中我坚持三个铁律所有嵌入式项目必须包含memory-map.ld链接脚本并在Makefile中显式调用-T memory-map.ld每次修改分区表或设备树必须重新生成build_info.h头文件将CONFIG_FLASH_BASE0x10000等宏注入源码使用readelf -l your_app.elf检查Program Headers中的p_vaddr虚拟地址是否与硬件手册要求的加载地址一致。2.4 镜像生成从可执行文件到可烧录镜像关键在格式转换编译生成的.elf文件不能直接烧录必须转换为目标平台能识别的二进制格式。这个过程看似简单却是“烧录失败”的高发区。转换的核心是剥离调试信息、重定位地址、填充空白区域。以“dd键鼠”关联的Rock 5B开发板为例其eMMC启动要求镜像必须是raw格式的SD卡镜像即包含MBR分区表、boot分区FAT32、rootfs分区ext4的完整块设备映像。此时dd命令的作用是将整个镜像文件按字节顺序写入eMMC设备如/dev/mmcblk0。但若镜像未对齐4KB边界或boot分区未格式化为FAT32dd写入后系统将无法识别分区。而“esp32烧录方式”则完全不同。ESP32使用esptool.py其核心是将.elf转换为.bin并添加引导头Bootloader Header。执行esptool.py --chip esp32 merge_bin -o firmware.bin --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 app.bin时0x1000、0x8000、0x10000这三个地址必须与分区表完全一致。我曾因复制粘贴错误将0x10000写成0x1000导致app.bin被写入bootloader区域烧录后芯片永久变砖只能用JTAG救回。对于“stlinkv2烧录stm32教程”这类MCU镜像生成更需谨慎。STM32的.hex文件是Intel HEX格式每行包含地址、长度、数据、校验和。若使用objcopy -O ihex main.elf main.hex生成必须确保main.elf的起始地址readelf -h main.elf | grep Entry与STM32的向量表起始地址通常是0x08000000一致。否则烧录后复位向量指向错误地址MCU直接死机。镜像生成的通用检查清单✅.bin文件大小是否为4KB的整数倍eMMC/SD卡要求✅.hex文件中首行地址是否等于芯片Flash起始地址✅.dtb文件是否通过fdtdump -s your.dtb验证结构完整性✅zImage是否用mkimage -A arm -O linux -T kernel -C none -a 0x80000000 -e 0x80000000 -n Linux -d vmlinux zImage添加U-Boot头。3. 烧录与验证从“写入完成”到“稳定运行”的最后一道关卡3.1 烧录方式选择没有万能方案只有场景适配烧录不是技术而是工程决策。不同开发板、不同芯片、不同量产阶段适用的烧录方式天差地别。热搜词中“jlink烧录”、“stlinkv2烧录”、“flashdownloadtools烧录esp32”、“liberoeda工具烧录”并存正说明这一点。J-LinkSEGGER适用于ARM Cortex-M系列MCU如STM32、NXP LPC。优势是支持SWD/JTAG双协议、烧录速度快1MB/s、可在线调试。但成本高J-Link EDU Mini约¥300且对ARM Cortex-A系列SoC如i.MX6ULL支持有限。ST-Link V2专为STM32优化成本低¥30-¥50但仅支持ST自家芯片且V2协议不支持SWOSerial Wire Output实时跟踪。ESP-IDF Flash Download Tools针对ESP32/ESP32-S2/S3定制集成串口自动识别、波特率自适应、分区表校验。但仅限乐鑫生态无法烧录其他芯片。Libero EDAMicrosemi现MicrochipFPGA专用工具烧录对象是bitstream比特流文件本质是配置FPGA内部查找表LUT和布线资源与MCU的固件烧录原理完全不同。选择依据有三条芯片原厂支持度优先使用原厂推荐工具如ESP-IDF、STM32CubeProgrammer因其内置芯片特定的擦除算法和安全启动校验量产效率需求单板调试用串口UART百片以上量产必须用JTAG/SWD批量烧录器如J-Link PRO安全启动要求若启用Secure Boot如i.MX6ULL的HAB烧录必须通过hab_container工具签名普通dd或esptool会因签名失败被BootROM拒绝。以“radxa rock 5b开发板”为例其RK3566芯片支持三种烧录模式MaskROM模式短接eMMC CLK与GND上电后进入USB Device模式用rkdeveloptool烧录Loader模式运行u-boot后通过ums 0 mmc 0命令将eMMC暴露为USB Mass Storage用dd写入Fastboot模式u-boot支持fastboot协议用fastboot flash boot boot.img烧录。我实测发现MaskROM模式最可靠绕过所有固件但需物理短接Loader模式最便捷无需额外硬件但依赖u-boot稳定性Fastboot模式最灵活支持分区擦除但首次烧录必须用前两种方式部署u-boot。3.2 烧录命令详解dd、esptool、openocd背后的原理dd命令常被误解为“粗暴写入”实则是eMMC/SD卡烧录的基石。其核心参数bs4M块大小和oflagsync同步写入决定成败。dd ifrock5b.img of/dev/mmcblk0 bs4M oflagsync中bs4M确保每次IO操作对齐eMMC的页大小通常4KB避免多次小写入导致性能暴跌oflagsync强制内核等待数据真正写入闪存介质而非仅写入缓存。若省略此参数拔卡时可能因缓存未刷盘导致镜像损坏。esptool.py则是ESP32的“智能烧录器”。它不只是发送二进制流还执行自动检测芯片型号发送CHIP_ID命令根据芯片ID选择对应擦除算法ESP32用erase_regionESP32-S3用erase_sector在烧录前校验flash内容--verify选项避免重复烧录写入后执行read_mac命令读取烧录成功的MAC地址如热搜词{mac:dd:fb:05:9d:90:48,name:watch7 max}中的MAC即由此获取。openocdOpen On-Chip Debugger是JTAG/SWD的通用接口。烧录STM32时openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c program main.elf verify reset exit命令中interface/stlink-v2.cfg定义ST-Link硬件通信参数target/stm32f4x.cfg描述STM32F4的内存映射和调试寄存器verify选项会将烧录后的flash内容读回与main.elf的.text段逐字节比对确保无位错误。实操心得烧录前必做三件事——① 用lsblk确认/dev/mmcblk0是目标eMMC而非系统盘/dev/sda② 用stty -F /dev/ttyUSB0 115200测试串口是否响应③ 对firmware.bin执行sha256sum与编译输出日志中的checksum比对杜绝文件损坏。3.3 烧录后验证不止看“烧录成功”更要查“运行正确”烧录完成只是开始验证才是关键。我见过太多人看到终端打印“Download completed”就收工结果第二天发现LED不亮、网络不通、传感器无数据。验证必须分层进行Level 1硬件层验证。上电后观察电源指示灯、晶振是否起振用示波器测XTAL引脚、串口是否有BootROM打印如“ROM USB download mode”。若无任何输出立即用万用表测VCC/GND电压应为3.3V±5%排除供电问题。Level 2固件层验证。通过串口115200 8N1捕获启动日志。关键检查点u-boot是否打印Hit any key to stop autoboot说明u-boot正常加载kernel是否打印Booting Linux on physical CPU 0x0说明kernel解压成功是否出现VFS: Cannot open root device mmcblk0p2说明分区表或文件系统损坏是否有usb 1-1: new high-speed USB device number 2 using dwc2说明USB PHY初始化成功。Level 3应用层验证。运行ps aux | grep your_app确认进程存在用cat /proc/cpuinfo | grep model name验证CPU识别执行./your_app --version检查程序入口逻辑。针对热搜词“imx6ull开发板在屏幕终端中文显示乱码”验证步骤必须延伸在Mobaxterm中确认locale输出为LANGen_US.UTF-8在开发板终端执行echo $LANG若为POSIX则说明环境变量未继承运行iconv -f utf-8 -t gbk 测试若报错iconv: illegal input sequence at position 0证明glibc未编译UTF-8支持最终解决方案在交叉编译glibc时添加--enable-profile --with-headers$(SYSROOT)/usr/include并确保localedef -i zh_CN -f UTF-8 zh_CN.UTF-8在目标文件系统中执行。4. 常见问题与排查技巧实录那些官方文档不会写的坑4.1 “烧录失败”类问题90%源于连接与权限现象根本原因排查命令解决方案esptool.py报错SerialException: could not open port COM3Windows下USB转TTL驱动未安装或端口号被占用modeWindows或ls /dev/tty*Linux重装CH340驱动拔插USB线在设备管理器中查看端口号st-flash write main.bin 0x08000000报错Failed to connect to targetST-Link未正确连接SWD引脚SWCLK/SWDIO/GND或目标芯片处于复位状态st-info --probe检查排线方向确认NRST引脚悬空非强制拉低短接BOOT0到3.3V进入系统存储器启动dd: failed to open /dev/mmcblk0: Permission denied普通用户无权访问块设备ls -l /dev/mmcblk0执行sudo groupadd -f dialout sudo usermod -a -G dialout $USER重启生效jlink.exe提示Could not terminate J-Link processJ-Link Commander后台进程残留taskkill /f /im JLink.exeWindows任务管理器结束所有JLink相关进程或拔插J-Link硬件踩坑实录某次为“合众恒跃瑞芯微3506开发板”烧录反复失败。最终发现是USB线质量问题——线缆内部屏蔽层断裂导致SWD信号在长距离传输中衰减。更换原装USB线后openocd连接成功率从30%提升至100%。教训嵌入式调试中线材不是消耗品而是精密仪器的一部分。4.2 “烧录成功但不运行”类问题内存与启动流程的隐形杀手现象根本原因关键日志线索解决方案u-boot启动后卡在Starting kernel ...kernel镜像地址与u-boot的bootz命令指定地址不一致u-boot中printenv bootcmd修改bootcmd为bootz 0x80800000 - 0x83000000确保zImage和dtb地址匹配LED常亮不闪烁应用程序main()函数未执行或中断向量表未正确加载启动日志中无Hello World打印检查链接脚本中.isr_vector段是否位于0x08000000用arm-none-eabi-objdump -d main.elf | grep Reset_Handler确认复位向量指向网络ping不通但ifconfig显示eth0已UPPHY芯片驱动未加载或MDIO总线通信失败dmesg | grep phy在设备树中添加ethernet0 { phy-handle phy0; }; phy0 { reg 0; };并确保内核配置CONFIG_REALTEK_PHYyesp32烧录overlap报错分区表中factory分区起始地址0x10000与app.bin烧录地址冲突esptool.py --chip esp32 image_info firmware.bin用gen_esp32part.py重新生成分区表确保offset字段无重叠实操技巧当遇到“烧录后无任何输出”时我的标准动作是——① 用逻辑分析仪抓取UART TX线波形确认是否有数据发出排除硬件故障② 若有波形但内容乱码立即检查串口波特率常见错误代码设115200终端设9600③ 若无波形用示波器测PA9STM32F4的USART1_TX引脚确认GPIO是否配置为复用推挽输出。4.3 “交叉编译环境异常”类问题版本地狱的终极解法现象根本原因快速诊断法彻底解决法qt5.9.9交叉编译(openssl)报错openssl/ssl.h: No such file or directoryOpenSSL头文件路径未加入-I或交叉编译的OpenSSL未安装find $(TOOLCHAIN) -name ssl.h在Qt configure中添加-openssl-linked -I$(OPENSSL_SYSROOT)/include -L$(OPENSSL_SYSROOT)/libubuntu24交叉编译arm失败提示fatal error: bits/libc-header-start.h: No such file or directoryUbuntu 24.04的glibc 2.39与旧版交叉工具链不兼容arm-linux-gnueabihf-gcc -v查看工具链GCC版本放弃Ubuntu 24.04退回20.04或用crosstool-ng重新构建支持glibc 2.39的工具链arduino328pb烧录bootloader失败avrdude: stk500_getsync()Arduino ISP烧录器未正确设置熔丝位或目标芯片时钟源错误avrdude -p m328pb -c arduino -P /dev/ttyUSB0 -v用avrdude -p m328pb -c arduino -P /dev/ttyUSB0 -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -U efuse:w:0xfd:m重置熔丝经验总结交叉编译环境的稳定性取决于三个版本的三角平衡宿主机内核版本影响系统调用兼容性、工具链GCC版本影响C标准支持、目标平台glibc版本影响ABI。我的做法是为每个项目建立独立的build-env目录内含toolchain/、sysroot/、sdk/三个子目录并用source env-setup.sh统一设置PATH和SYSROOT。这样不同项目互不干扰切换成本为零。5. 工具链与烧录方案选型指南根据项目阶段精准匹配5.1 学习验证阶段低成本、高容错、强反馈此阶段核心诉求是快速获得正向反馈降低挫败感。推荐组合开发板ESP32-DevKitC¥30集成USB转UART无需额外调试器IDEVS Code PlatformIO插件自动管理工具链、一键烧录、串口监视器集成烧录方式ESP-IDF自带idf.py flash自动识别端口、波特率、芯片型号调试方式PlatformIO Serial Monitor支持UTF-8、自动换行、发送历史记录。优势PlatformIO会自动下载xtensa-esp32-elf-gcc工具链解压到~/.platformio/packages/toolchain-xtensa32且每次更新都保留旧版本避免“升级后编译失败”的尴尬。烧录时它会在串口发送CtrlC中断当前运行程序再发送CtrlR复位确保烧录前芯片处于可接收状态。5.2 产品原型阶段可复现、易协作、留痕迹此阶段需保证多人协作一致性和版本可追溯性。推荐组合构建系统CMake Ninja比Make更快错误提示更清晰环境管理DockerFROM ubuntu:20.04预装gcc-arm-linux-gnueabihf、qemu-user-static烧录脚本Python PySerial封装esptool.py或openocd命令添加超时重试、日志记录验证自动化Shell脚本调用expect模拟串口交互自动检测启动日志关键词。示例Dockerfile关键片段FROM ubuntu:20.04 RUN apt-get update apt-get install -y \ gcc-arm-linux-gnueabihf \ g-arm-linux-gnueabihf \ libstdc6-armhf-cross \ rm -rf /var/lib/apt/lists/* COPY ./toolchain /opt/toolchain ENV PATH/opt/toolchain/bin:$PATH WORKDIR /workspace5.3 量产交付阶段高吞吐、零失误、可审计此阶段核心是烧录良率和过程审计。推荐组合烧录硬件J-Link PRO支持JTAG链式烧录单台可同时烧录4块板烧录软件SEGGER J-Flash图形界面支持烧录日志导出、不良品标记质量门禁在CI/CD流水线中加入sha256sum firmware.bin expected_hash校验文档交付生成burning-report.pdf包含烧录时间、设备序列号、校验码、操作员签名。最后分享一个小技巧为避免“烧录后忘记拔USB线导致下次烧录失败”我在所有开发板的USB接口旁贴了一张荧光标签上面印着“烧录完成 →
返回列表