马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 ty198826 于 2013-12-4 19:37 编辑
对于已经有了J-link的人,有一个官方的软件可以下载程序,是SEGGER公司开发的。J-link可以支持大多数的Nor-flash的烧写和内存的读写等。但有一个最大的问题,就是J-link不支持Nand-flash的读写。对于现在的嵌入式来说,尤其对于那些开发板不带nor-flash的人来说,烧写裸板会很不方便,而且取消在Arm中的nor-flash也会减少制作开发板的成本。这样就很有必要利用J-link的特点来开发一款下载器,使得开发嵌入式的速度能够大大加快。 本下载器的功能如下: 支持多数Nor-flash,Nand-flash的下载 支持Nor-flash和Nand-flash 的U-boot的下载 支持Nand-flash内核的下载 支持Nand-flash文件系统的下载 支持串口通讯 具有部分串口终端的作用
本下载器的特点有:下载速度快,支持较多芯片的下载。由于测试条件有限,现阶段测试的芯片主要是基于ARM9平台下,主要的flash芯片有: Nor-flash:SST39VF1601,Am29LV160DB,28F128J3 Nand-flash:HY27US08121,K9F2G08
初期想法来源刚开始是由于自己想要学习U-boot的移植,原来我买的开发板是ZY2440,不带Nor-flash,原来是用并口的wiggler下载器进行下载,但由于现在的笔记本都不带并口,所以这种方法在我的笔记本上不可行,而台式机又携带不方便。经过和同学的交流,我知道了还有一个J-link下载器,可以用在ARM的下载上,而且价格不贵,才30左右,比OpenJTAG的180便宜的多,但jlink却不支持Nand-flash的下载,这未免让我有些失望。但通过在网上搜索资料,我发现有两种方法可以用J-link下载Nand-flash: 1.1 直接法:通过j-link操作ARM的寄存器实现。但这种方法速度较慢,需要几分钟才能下载好一个200K左右的U-boot,更别说下载内核和文件系统了,还的需要其它的方式来下载内核和文件系统。对于学习U-boot移植来说,会大大影响效率。 1.2 间接法: 这种方法是先利用Jlink下载特制的init文件,下载u-boot到ram中。这样就可以利用u-boot来下载程序。 虽然这种方法实现了用J-link下载程序到Nor-flash和Nand-flash中,而且速率可以较快,但这种方法步骤比较多,错一步就可能需要重来。从这开始,我就想做一个用间接法来实现下载的下载器,而且能够简化步骤。
J-link下载器的初步实现 刚开始时,我使用的是VC来编写程序的,其运行图如下:
这个版本的功能的主要步骤如下: 1) 连接J-link并读J-link的SN,即检测J-link是否存在; 2) 检测ARM是否连接; 3) 下载init.bin文件到ARM内部RAM,即Nor启动是为0X40000000,Nand启动时为0X00000000,并运行程序初始化内存; 4) 在内存初始化好以后,就下载能在内存中运行的u-boot-init.bin到内存中; 5) 下载要下载到开发板中的u-boot.bin到内存中; 6) 运行u-boot-init,就能在串口终端中执行相应的u-boot命令来下载nor-flash和nand-flash了。 从上面的步骤来说,该程序简化了用间接法来下载的第一大步骤。
J-link下载器的实现 从上面的过程中我发现,其实我可以将间接法的两大步骤合在一起,这样能够更简化用户的操作步骤。但VC中对界面编程支持不是太好,于是我试着用C#来进行再次编程,这样能增加用户体验,我采用的是VS2008开发环境。 在使用串口方面,我使用的是SerialPort,
微软推出了的 Visual Studio 2008 开发工具,可以不再采 用第三方控件的方法来设计串口通讯程序。NET Framework 2.0 类库包含了 SerialPort 类,方便地实现了所需要串口通讯的多种功能, 可以实现MSComm 编程方法快速转换到以 SerialPort 类为核心的串口通讯。 利用串口,能够实现将U-BOOT命令传入到开发板,实现开发板的存储的更改。主要实现以下命令: 通过u-boot烧写到Nor Flash,在u-boot里执行:
protect off all // 解锁
erase 0 2ffff // 擦除从0地址开始的大小为0x30000的NOR Flash扇区(大小为可擦除块的整数倍,可以运行flash info命令查看)
cp.b 0x30000000 0 30000 // 把前面下载到0x30000000的程序烧写到NOR去
通过u-boot烧写到Nand Flash,在u-boot里执行:
nand erase 0 30000 // 擦除从0地址开始的大小为0x30000的Nnad Flash扇区
nand write.jffs2 30000000 0 30000 // 把前面下载到0x30000000的程序烧写到Nand去 这样就能实现程序的一键下载。在此能下载U-BOOT的基础上,还将下载内核和文件系统的功能也集成上去。
|