歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 如何利用JLINK燒寫U-boot到NAND Flash中

如何利用JLINK燒寫U-boot到NAND Flash中

日期:2017/3/1 10:18:22   编辑:Linux編程

很多同學使用筆記本作為自己的ARM開發和學習的平台,絕大多數筆記本都沒有並口,也就是無法使用JTag調試和燒寫程序到Nand Flash中,幸好我們還有JLINK,用JLINK燒寫U-boot到Nor Flash中很簡單,大部分NOR Flash都已經被JLink的軟件SEGGER所支持,而新手在學習的時候經常會實驗各種各樣的命令,最悲劇的莫過於將NAND Flash中原有的bootloader給刪除了,這時候開發板上電後由於沒有bootloader,硬件沒有被初始化,在NAND Flash中的操作系統也就無法被加載,開發板成“磚”了,這時候筆記本又無法利用JTag燒寫程序進Nand Flash。起始這些可以利用JLink通過兩種方法解決:

一、方法一,利用NOR Flash。

這種方法是利用JLink能夠燒寫程序到NOR Flash來完成的,首先利用J-FLASH ARM將u-boot.bin燒寫進NOR Flash(記得燒寫到NOR Flash的0x0起始地址處),然後設置開發板從NOR Flash啟動,這時候系統進入U-boot命令行模式,這時候打開J-Link commander,輸入命令:r 看JLink是否能識別開發板的信息(也就是判斷JLink是否連接正常)。

以下是在J-Link commander裡的命令,先假設u-boot.bin在你電腦的D盤根目錄下。

  1. 1. speed 12000 //設置TCK為12M,下載程序時會很快
  2. 2. loadbin d:\u-boot.bin 0x30000000

注意:0x30000000是你想要下載u-boot.bin到開發板的內存地址,內存地址根據不同的開發板設定不同,因為本文中使用的是FL2440,片上系統是S3C2440,內存掛載的地址區域是0x30000000~0x33ffffff,我們只需要把u-boot.bin下載到這片區域即可。

然後我們在U-boot命令行模式輸入NAND Flash擦除和寫入命令即可:

  1. nand erase 0 40000
  2. // 擦除從0地址開始的大小為0x40000的Nnad Flash扇區,0x40000是待寫入的U-boot.bin的大致長度,長度必須為NAND Flash頁大小的整數倍,通常會需要比u-boot.bin實際長度長。
  3. nand write 30000000 0 40000 // 把前面下載到0x30000000的u-boot.bin燒寫到Nand去

然後我們再設置開發板從NAND Flash啟動即可。

二、方法二,直接通過JLink

假如你的開發板沒有NOR Flash或者是你使用的NOR Flash還未被J-FLASH ARM所支持,這時上面的方法你就無法使用了,這時候你需要一個初始化內存SDRAM的程序,這個程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作,fl2440的內存初始化程序下載地址:“2440init.bin”。(很短的程序,初始化SDRAM的寄存器,使得SDRAM能正常工作)

下載在Linux公社的1號FTP服務器裡,下載地址:

FTP地址:ftp://www.linuxidc.com

用戶名:www.linuxidc.com

密碼:www.muu.cc

在 2012年LinuxIDC.com\7月\如何利用JLINK燒寫U-boot到NAND Flash中

下載方法見 http://www.linuxidc.net/thread-1187-1-1.html

你還需要准備一個特殊的u-boot_SDRAM.bin,它與你要燒寫到NAND Flash的u-boot.bin有區別,u-boot_SDRAM.bin編譯時需要在include/configs/開發板配置文件.h文件中添加:

#define CONFIG_SKIP_LOWLEVEL_INIT 1 //用來支持uboot在內存中直接運行

添加這個宏定義之後,U-boot就跳過了內存初始化的部分,因為此時我們的內存已經先由“2440init.bin“初始化好了,再次初始化會出現內存數據的丟失。

做好上面的准備工作之後,首先將開發板設為從NAND Flash啟動,啟動J-Link commander,先假設“u-boot.bin”和“2440init.bin”在電腦的D盤根目錄下。

  1. loadbin d:\2440init.bin 0
  2. setpc 0
  3. g

為什麼需要把"2440init.bin"復制到0x0地址是因為S3C2440有4K的SRAM,它不需要初始化就可以直接執行程序,從NAND Flash啟動時,這個SRAM的地址會掛載到0x0~0x1000的地址空間,我們先把"2440init.bin"復制到SRAM中運行,執行這部分後S3C2440的SDRAM內存就初始化好了(地址空間0x30000000~0x33ffffff)。也許有人會說為什麼不一開始就把u-boot_SDRAM.bin放在SRAM中運行啊?SRAM只有4K的大小,而U-boot通常在100~300K,SRAM的空間顯然不夠,而"2440init.bin"的大小只有不到2K,它可以在SRAM中運行。

內存初始化成功後,下載特制的u-boot_SDRAM.bin:

  1. h
  2. loadbin e:\u-boot_SDRAM.bin 0x33f80000
  3. setpc 0x33f80000
  4. g

這時你應該可以在串口看到U-boot的輸出信息了,然後我們在U-boot命令行模式輸入NAND Flash擦除和寫入命令即可:

  1. nand erase 0 40000
  2. // 擦除從0地址開始的大小為0x40000的Nnad Flash扇區,0x40000是待寫入的U-boot.bin的大致長度,長度必須為NAND Flash頁大小的整數倍,通常會需要比u-boot.bin實際長度長。
  3. nand write 30000000 0 40000 // 把前面下載到0x30000000的u-boot.bin燒寫到Nand去

根據上面的步驟就可以完成u-boot到NAND Flash的燒寫了,實際上是利用一個SDRAM中運行的u-boot去燒寫u-boot.bin到NAND Flash中。

Copyright © Linux教程網 All Rights Reserved