Linux_Hi3518E开发_SPI Flash程序下载

开篇废话

    上周在做SPI Flash程序下载实验的时候,不小心把uboot的程序给擦除掉了,当时那个悔啊,上淘宝搜了一下SPI Flash的芯片,然后找到了SPI Flash的烧录器。附上淘宝链接:https://item.taobao.com/item.htm?spm=a1z1r.7974869.0.0.tyNT5t&id=536952540406,有需要的朋友请自行采购哦。元旦回来第一天快递就到了,所以一早就把这个实验给做了。
    由于制作文件系统镜像这个实验还没成功,所以先拿SDK自带的u-boot,image和rootfs文件来完成SPI Flash下载的实验。

实验环境

主机系统:win7
虚拟机系统:Ubuntu14.04
目标板:Hi3518E
SPI Flash:KH25L12835F
串口终端:SecureCRT.exe
TFTP终端:Tftpd32

相关文件

u-boot:u-boot-200MHZ.bin
内核:uImage
文件系统:rootfs_64k.jffs2
(这几个文件通过CuteFtp软件传输到PC上)

地址空间说明

        |       1M      |        3M        |            12M              |
        |-------------|---------------|-----------------------|
        |      boot     |      kernel     |         rootfs               |

U-boot程序下载

    U-boot程序下载分两种情况,如果是第一次下载,则需要通过特定的工具来进行,如开发指南里面提到的RVDS工具,这个我上网搜了一下,价格老贵的,像我这种轻量级玩家完全没有必要的。或者就是上面链接提供的这种小型的SPI Flash烧录器。如果板子上已经有U-boot运行,那么可以通过网口或者串口的方式与服务器连接,直接更新U-boot,我在这里采用网口的形式进行更新。下面就这两种情况,具体讲解下载的过程。
1)第一次下载
将SPI Flash芯片从板子上焊接下来,放到如下图所示的Socket里面,注意芯片的方向。
通过USB接口连接到PC,查看USB转串口芯片是否被识别到,如果没有请安装相关驱动。

打开CH341A编程器软件,界面如下,如果有检测到芯片连接的状态,在软件界面上可以看到,如果没有,请检查芯片的硬件连接情况。

U-boot烧写流程如下 
1、检测,软件自动检测芯片的匹配型号
2、擦除,将待编程芯片的所有字节编程0xFF
3、查空,检查待操作芯片是否为空芯片,擦除后自动进行
4、打开,加载一个文件到数据缓冲区
5、编程,将缓冲区的数据烧写到芯片里面
6、校验,比较缓冲区里的数据和芯片里面的数据是否相同

2)已有U-boot运行
1、配置TFTP服务器
一开始我在虚拟机上尝试开启TFTP服务,但是一直传输不成功,我怀疑是虚拟机的TFTP服务的IP地址不对导致的,后来还是在主机上采用Tftpd32开启TFTP服务,一次就成功了,启动软件,具体设置如下:
Current Directory选择为TFTP服务器目录
Server interfaces选择为TFTP服务器的IP地址
下面的显示窗口选择Log viewer,可以看到单板发送过来的TFTP连接请求。

2、配置参数,单板上电后,在串口终端敲回车键进入U-boot
hisilicon#setenv serverip 192.168.0.60 /*设置服务器端的IP地址,可根据需要具体设定*/
hisilicon#setenv ipaddr 192.168.0.201 /*设置Hi3518E单板的IP地址*/
hisilicon#setenv netmask 255.255.255.0 /*设置netmask*/
hisilicon#setenv gatewayip 192.168.0.1 /*设置网关*/
hisilicon#saveenv /*保存设置*/
hisilicon#ping 192.168.0.60 /*用来判断网络是否正常*/
(备注:后面内核和文件系统的下载也需要在这两个配置完成的情况下操作。)
3、烧写U-boot
SPI Flash烧写的方法如下:
hisilicon#mw.b 0x82000000 ff 0x100000 /* 对内存初始化*/
hisilicon#tftp 0x82000000 u-boot-200MHZ.bin /*U-boot
下载到内存*/
hisilicon#sf probe 0 /*
探测并初始化SPI flash*/
hisilicon#sf erase 0x0 0x100000 /*
擦除 1M大小*/
hisilicon#sf write 0x82000000 0x0 0x100000 /*
从内存写入SPI Flash*/
Writing at 0x100000 -- 100% complete.
hisilicon#

内核程序下载

下载内核到SPI Flash的操作如下所示:
hisilicon#sf probe 0 /* SPI Flash 进行初始化设置 */
hisilicon#sf erase 0x100000 0x300000 /*在进行FLASH写入之前必须先手动擦除FLASH,否则写入FLASH的数据错误*/
hisilicon#mw.b 0x82000000 ff 0x300000 /* 对内存初始化*/
hisilicon#
tftp 0x82000000 uImage /*tftp服务器上的uImage
件下载到 0x82000000 的位置 */
正常的下载过程超级终端中显示的信息如下所示:
MAC: 00-00-23-34-45-66
TFTP from server 192.168.0.60; our IP address is 192.168.0.201
Download Filename ' uImage'.
Download to address: 0x82000000
Downloading: ##############################
done
Bytes transferred = 2890920 (2c1ca8 hex)
hisilicon#sf write 0x82000000 0x100000 0x300000 /*
0x82000000 的数据写入 SPI Flash 0x100000 地址处,写入长度为 0x300000*/
Writing at 0x400000 -- 100% complete.
hisilicon#

文件系统程序下载

下载根文件系统到SPI Flash的操作如下所示:
hisilicon#sf probe 0 /*SPI Flash进行初始化设置*/
hisilicon#sf erase 0x400000 0xC00000 /*首先擦除FLASH的文件系统分区,FLASH分区信息参见后面的启动参数设置*/
hisilicon#mw.b 0x82000000 ff 0xc00000 /* 对内存初始化*/
hisilicon#
tftp 0x82000000 rootfs-FULL_REL.jffs2 /*
rootfs-FULL_REL.jffs2文件下载到0x82000000*/
正常的下载过程超级终端中显示的信息如下所示:
MAC: 00-00-23-34-45-66
TFTP from server 192.168.0.60; our IP address is 192.168.0.201
Download Filename 'rootfs-FULL_REL.jffs2'.
Download to address: 0x82000000
Downloading: ################################ 
done
Bytes transferred = 4316852 (41deb4 hex)
hisilicon#sf write 0x82000000 0x400000 0xC00000
Writing at 0xC00000 -- 100% complete.
hisilicon#
由于SPI Flash的写操作速度较慢,如果下载的文件较大,则需要花费一定的时间,等到重新回到“ hisilicon#”的提示符,表示下载完成。

设置启动参数

hisilicon#setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
hisilicon#setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
hisilicon#saveenv

结果展示

串口终端打印信息如下:
U-Boot 2010.06 (Mar 11 2014 - 17:35:45)

Check spi flash controller v350... Found
Spi(cs1) ID: 0xC2 0x20 0x18 0xC2 0x20 0x18
Spi(cs1): Block:64KB Chip:16MB Name:"MX25L128XX"
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 
Wrong Image Format for bootm command
ERROR: can't get kernel image!
hisilicon # 
从打印的信息可以得到内核image的文件格式存在问题,有可能是和硬件不匹配造成的。

后面实验证实的确是image文件的硬件配置不匹配导致的,采用在/Hi3518_SDK_V1.0.8.1/osdrv/kernel/linux-3.0.y/arch/arm/boot目录下,用Hi3518E配置产生的内核文件,可启动内核及后面的操作。

下一个实验:制作文件系统镜像。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
针对在ARM Linux上进行hi3516应用程序开发,我可以为你提供一些基本的指导。 首先,你需要准备一个开发环境,包括一个ARM Linux开发板或者嵌入式系统、交叉编译工具链和相关的SDK或开发包。 接下来,你可以按照以下步骤进行应用程序开发: 1. 了解hi3516芯片的技术规格和功能,包括其处理器架构、外设接口以及支持的操作系统等。 2. 在开发板上安装和配置ARM Linux操作系统,确保你可以正常访问和控制开发板。 3. 下载和配置hi3516的SDK或开发包,这些软件包通常包含了设备驱动程序、库文件以及示例代码等。 4. 使用交叉编译工具链编写C/C++或者其他支持的语言的应用程序代码。你可以使用文本编辑器或者集成开发环境(IDE)进行代码编写。 5. 在编写代码时,根据hi3516的技术文档和示例代码,使用相应的API或者库函数进行设备的初始化、配置和控制等操作。 6. 编译你的应用程序代码,并将生成的可执行文件通过网络或者其他方式传输到目标设备上。 7. 在目标设备上运行你的应用程序,进行测试和调试。你可以通过终端或者远程登录的方式执行应用程序,并观察其输出结果和行为。 8. 根据你的需求,不断优化和完善你的应用程序,确保其功能和性能达到预期。 这只是一个大致的开发流程,具体的步骤和细节可能因为你的具体应用场景而有所不同。建议你参考hi3516的官方文档和开发者社区,获取更详细和准确的指导。祝你在hi3516应用程序开发中取得成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值