【TINY4412】U-BOOT移植笔记:(15)DFU更新固件
宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
U-BOOT版本: 2017.03
交叉编译器: gcc-arm-none-eabi-5_4-2016q3
日期: 2017-6-12 21:23:32
作者: SY
简介
DFU
全称Device Firmware Upgrade
设备固件更新。
移植
Linux端
- 安装软件:apt-get install dfu-util
- 使用usb线将开发板与电脑端连接起来
开发板端
- 使用 make menuconfig 配置打开dfu相关选项。
- 在.config中增加
CONFIG_CMD_DFU=y
# DFU support
CONFIG_USB_FUNCTION_DFU=y
# CONFIG_DFU_TFTP is not set
CONFIG_DFU_MMC=y
# CONFIG_DFU_NAND is not set
CONFIG_DFU_RAM=y
# CONFIG_DFU_SF is not set
可以使用MMC和RAM存储文件
3. 输入 setenv dfu_alt_info u-boot.bin ram 0x43E00000 0x100000
表示如果使用ram方式,将接收的数据存储在RAM中以0x43E00000开始的位置,最大为0x10000
表示如果使用mmc方式,将接收的数据存储在MMC中以0x10000000开始的位置,最大为0x10000
测试
>> 开发板
TINY4412 # dfu 0 ram 0
USB PHY0 Enable
crq->brequest:0x0
>> 电脑端
root@ubuntu:/opt/u-boot-2017.03# dfu-util -D u-boot.bin
dfu-util 0.8
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org
dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 18d1:4e30
Run-time device DFU version 0110
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 4096
Copying data from PC to DFU device
Download [=========================] 100% 419666 bytes
Download done.
state(7) = dfuMANIFEST, status(0) = No error condition is present
state(2) = dfuIDLE, status(0) = No error condition is present
Done!
root@ubuntu:/opt/u-boot-2017.03#
>> 开发板
#DOWNLOAD ... OK
Ctrl+C to exit ...
TINY4412 # go 0x43E00000
U-Boot 2017.03-gda9faf9-dirty (Jun 12 2017 - 20:44:58 +0800) for TINY4412
CPU: Exynos4412 @ 1.4 GHz
Model: Tiny4412 based on Exynos4412
Board: Tiny4412 based on Exynos4412
DRAM: 1 GiB
WARNING: Caches not enabled
MMC: SAMSUNG SDHCI: 0, EXYNOS DWMMC: 1
Hit any key to stop autoboot: 0
SD/MMC found on device 0
** Invalid partition 1 **
** Invalid partition 1 **
** Invalid partition 1 **
Wrong Image Format for bootm command
ERROR: can't get kernel image!
- 这样开发板变更新了U-BOOT。注意:
0x43E00000
是代码连接地址,#define CONFIG_SYS_TEXT_BASE 0x43E00000
,不能随便将代码下载到其他内存地址,否则将导致开发板死机! - 原来更新U-BOOT都是通过先烧录到SD卡,然后选择SD卡启动的方式。效率低而且对SD卡寿命有影响,如果使用这种方式,只需要将待验证的代码下载到内存,即可快速验证!