Lichee spi norflash啟動


一. 准備sunxi-fel工具
1.1. 下載鏈接:https://github.com/Icenowy/sunxi-tools.git
1.1.1. git clone https://github.com/Icenowy/sunxi-tools.git
1.1.2. 查看分支並切換分支

 

 

    2.2. 編譯工具
a. sudo make
        b. 編譯如報上述錯誤,先安裝sudo apt-get install libusb-1.0-0-dev
c. sudo sunxi-fel -l查看工具

 

二. uboot 配置

    2.1. 開啟spi驅動

   

         如果使用的是16M以上的Flash,需要勾選SPI flash Bank/Extended address register support,否則只能讀取到16M

    2.2. 修改include/configs/sun8i.h

#define CONFIG_BOOTCOMMAND   "sf probe 0; "                           \
                             "sf read 0x41800000 0x100000 0x10000; "  \
                             "sf read 0x41000000 0x110000 0x400000; " \
                             "bootz 0x41000000 - 0x41800000"

#define CONFIG_BOOTARGS      "console=ttyS0,115200 earlyprintk panic=5 rootwait " \
                             "mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) root=31:03 rw rootfstype=jffs2"

       

              環境命令解析:

                     sf probe 0; //初始化Flash設備
                     sf read 0x41800000 0x100000 0x10000; //從flash0x100000(1MB)位置讀取dtb放到內存0x41800000偏移處。
                     sf read 0x41000000 0x110000 0x400000; //從flash0x110000(1MB+64KB)位置讀取dtb放到內存0x41000000偏移處。
                     bootz 0x41000000 (內核地址)- 0x41800000(dtb地址) 啟動內核
              啟動參數解析:

                      console=ttyS0,115200 earlyprintk panic=5 rootwait //在串口0上輸出信息
                      mtdparts=spi32766.0:1M(uboot)ro,64k(dtb)ro,4M(kernel)ro,-(rootfs) //spi32766.0時設備名,后面是分區大小、名字、讀寫屬性。
                      root=31:03 rw rootfstype=jffs2 //通過root=31:03來告訴內核rootfs的位置mtdblock3;根文件系統格式為jffs2。

三. 內核配置

    3.1. 執行make ARCH=arm menuconfig打開內核菜單配置,

         進入到Device Drivers

                        <* > Memory Technology Device (MTD) support,確保選擇上mtd的

                               <*> Command line partition table parsing支持,該項目用來解析uboot傳遞過來的flash分區信息,還有

                               <*> SPI-NOR device support

 

 

     3.2. 添加spi節點配置:

 

 

 四. 跟文件系統

    4.1. Flash支持jffs2文件系統格式,所以需要使用此該rootfs制作jffs2文件系統鏡像;

    4.2. 下載jffs2文件系統制作工具

apt-get install mtd-utils

    4.3. 制作文件系統鏡像

mkdir rootfs
sudo tar -xvf buildroot-2017.08/output/images/rootfs.tar -C rootfs/sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0x1AF0000 -d rootfs/ -o jffs2.img

#如果使用16M的flash  mx25l128,則需要做一些修改:
sudo mkfs.jffs2 -s 0x100 -e 0x10000 -p 0xAF0000 -d rootfs/ -o jffs2.img 
  • -p 指的是rootfs占據的總空間:16M-1M-64K-4M=0xAF0000 或者 32M-1M-64K-4M=0x1AF0000
  • -s 頁大小0x100 256字節
  • -e 塊大小0x10000 64k
  • jffs2.img是生成的文件系統鏡像。

 五. 制作系統鏡像

    5.1. 最后將uboot,dtb,zImage,rootfs拷貝到一個文件

    5.2. 編寫制作鏡像腳本

 

         PS:我的flash是32M,按理上圖中第一行中bs=16M應該為bs=32M,但我改為bs=32M時寫到flash不成功,改為bs=16M時就可以,不知道為什么,但window版本的sunxi-fel.exe可以燒錄32M,window版本使用參考末尾補充部分

         第一步:生成一個空文件,大小是16MB
         第二步:將uboot添加到文件開頭
         第三步:將dtb放到1M偏移處
         第四步:將kernel放到1M+64K偏移處
         第五步:將rootfs放到1M+64K+4M偏移處
         偏移大小是seek,單位是KB。

    5.3. 執行腳本完畢后生成鏡像文件flashimg.bin

 

 

 

 

六. 燒錄

     6.1. Zero有一個usb下載模式稱為fel模式,進入fel模式有下面幾種方式:

         6.1.1. TF卡和spi flash 同時沒有可啟動鏡像,也就是說你不插SD卡,且焊接的是新的或者沒有有效鏡像的spi flash,那就上電自動進入fel下載模式

         6.1.2. SD卡中有進入fel模式的特殊固件 fel-sdboot.sunxi

               如果你的spiflash已經有了啟動鏡像,那么需要在TF卡中燒入一個sunxi提供的啟動工具(dd if=fel-sdboot.sunxi of=/dev/sdb bs=1024 seek=8),那么插入該TF卡啟動會進入fel模式;

         6.1.3. 上電時SPI_CE接到GND

             通常使用此方法最為方便。但切記,進入fel就要斷開SPI_CE與GND的鏈接,不讓不能讀取norflash芯片

    6.2. sunxi-fel的操作

        6.2.1. 讀取flash

sudo sunxi-fel version        #查看連接的cpu信息
AWUSBFEX soc=00001681(V3s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
sudo sunxi-fel spiflash-info    #顯示flash信息
Manufacturer: Unknown (C2h), model: 20h, size: 33554432 bytes.

        6.2.2. 執行如下命令燒入我們前邊制作好的鏡像文件

sudo sunxi-fel -p spiflash-write 0 flashimg.bin
# -p 顯示進度條
#    spiflash-info            Retrieves basic information
#    spiflash-hex[dump] addr length    Dumps SPI flash region in hex
#    spiflash-read addr length file    Write SPI flash contents into file
#    spiflash-write addr file    Store file contents into SPI flash

    6.3. 最后上電重啟即可

 

補充:

    查看flash分區

    >cat  /proc/mtd // 可以顯示出所有掛載和未掛載的分區,但不顯示文件系統類型。

               >df -T // 只可以查看已經掛載的分區和文件系統類型。
               >fdisk -l// 可以顯示出所有掛載和未掛載的分區,但不顯示文件系統類型。
               >parted -l //可以查看未掛載的文件系統類型,以及哪些分區尚未格式化。
               >lsblk -f //也可以查看未掛載的文件系統類型。

               >df -h  //只會列出已掛載的文件系統信息,對於沒有掛載的文件系統是查看不到的,但不顯示文件系統類型

 

    windows 版sunxi-fel

    1.1. 下載工具

        下載鏈接:https://github.com/eperie/build-scripts/releases/download/v1.1/sunxi-fel.exe

    1.2. 下載zadig工具來安裝USB fel驅動

        1.2.1. zadig工具鏈接:http://zadig.akeo.ie/

        1.2.2. 安裝usb fel驅動

              a. Before launching it, make sure your Allwinner device is connected and in FEL mode

    1.3. 使用sunxi-fel.exe

        2.3.1. 進入win的命令窗口,使用方法和ubuntu版本一樣

 

 參考鏈接:https://blog.csdn.net/qq_40860568/article/details/100517132

 參考鏈接:https://linux-sunxi.org/FEL/USBBoot

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM