當前位置:首頁 » 數據倉庫 » 如何配置成qspi啟動
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何配置成qspi啟動

發布時間: 2022-09-05 19:40:14

① labview FPGA模塊中控制DIO板卡輸出IO量控制繼電器吸合,怎麼實現IO量自動輸出功能

第一步:使用Quartus和Qsys工具完成硬體系統的配置。

該步驟實現SOC最小系統的硬體配置,包括硬核處理器配置、HPS和FPGA之間通信介面匯流排的選擇、HPS外設裁剪、HPS時鍾配置和SDRAM配置。該實驗中主要用到HPS硬核,以及PIO外設IP核。Qsys工具為用戶提供硬體系統的可視化設計,能夠自動生成handoff文件,該文件配合bsp-editor工具可以生成preloader。Preloader是HPS的第二階段引導源,主要作用為:初始化SDRAM介面,配置HPS IO口,載入下一引導源並跳轉到它。

實驗步驟

1 新建Quartus工程。

1.1 設置工程存放路徑,工程名以及頂層文件名,如圖1所示。

圖1

1.2 選擇FPGA器件型號,如圖2所示,DE10-Standard板載FPGA型號為5CSXFC6D6F31C6。

圖2

1.3 點擊next直到finish,未提及的頁面均按默認設置即可。

2 在Qsys中配置SOC。

2.1 運行Qsys工具。

在Quartus軟體中,通過菜單欄Tools->Qsys打開Qsys工具。剛打開的Qsys工具頁面如圖3所示。

圖3

2.2 添加HPS並完成配置。

在左側的IP目錄中輸入hps,選中Arria V/Cyclone V Hard Processor System,雙擊添加HPS,在彈出的HPS配置頁面中進行HPS配置。HPS配置頁面如圖4所示。

圖4

1) 在FPGA Interfaces頁面中,General一欄均不勾選,AXI Bridges一欄設為64-bit、64-bit、32-bit,FPGA-to-HPS SDRAM Interface一欄中移除原有介面,Resets一欄中均不勾選。

2)在Peripheral Pins頁面中,設置HPS外設引腳復用及模式選擇。設置如表1所示。設置完成後頁面如圖5所示。(本實驗其實未用到這些外設)

表1 外設引腳復用及模式選擇

外設名稱

引腳復用選擇

模式選擇

EMAC1

HPS I/O Set 0

RGMII

QSPI

HPS I/0 Set 0

1SS

SDIO

HPS I/0 Set 0

4-bit Data

USB1

HPS I/0 Set 0

SDR

UART0

HPS I/0 Set 0

No Flow Control

(註:表中未提及的外設即Unused,無需設置)

圖5 Peripheral Pins頁面設置

  • 在HPS Clocks頁面中,確認下Input Clocks->External Clock Sources 中的時鍾頻率為25MHz,其它無需設置,默認即可。

  • 在SDRAM頁面中,參考圖6-11更改該頁面下所有子頁面中的參數。(本實驗未用到SDRAM,所以不設置也可)

    圖6

    圖7

    圖8

    圖9

    圖10

    圖11

    5) 至此,HPS設置完畢,點擊finish離開HPS設置頁面。

    2.3 添加並設置其它Qsys元件

    本實驗通過HPS控制FPGA部分的IO口,以此來控制連接在FPGA IO引腳LED燈的亮滅。所以整個SOC只需包含HPS和PIO,即Qsys中還需要添加PIO外設。

    添加PIO外設。在IP目錄中輸入PIO,選中PIO雙擊添加外設,設置頁面如圖12所示,本實驗通過PIO控制4個LED,故寬度為4。

    圖12

    2.4 配置Qsys系統元件

  • 修改元件名稱。本實驗把pio_0重命名為led_pio。

  • 導出外設的頂層I/O介面。在Export一欄下相應位置雙擊,導出led_pio的頂層I/O介面,命名為fpga_led_pio,導出hps_0的h2f_reset介面,命名為hps_0_h2f_reset,如圖13所示。

    圖13

  • 連接Qsys外設介面。外設的介面信號之間沒有連接,需要根據系統要求手動進行連接。各個外設之間的信號連接c如表2所示。連接好後如圖14所示。

    表2 元件信號連接關系

    需要連接的

    被連接的

    元件

    信號名

    元件

    信號名

    led_pio

    clk

    clk_0

    clk

    reset

    clk_0

    clk_reset

    s1

    hps_0

    h2f_lw_axi_master

    hps_0

    h2f_lw_axi_clock

    clk_0

    clk

    h2f_lw_axi_master

    led_pio

    s1

    圖14

    4)配置Qsys的地址映射。Qsys中添加的元件及外設都需要分配對應的基地址。這里我們採用自動分配的方式,在Qsys菜單中選擇System->Assign Base Address,完成基地址自動分配。

    5)生成Qsys系統。Save保存Qsys文件,命名為soc_led.qsys。然後點擊菜單Generate->Generate HDL,彈出如圖15設置框,按圖設置好後點擊Generate,Qsys將生成與硬體系統相關的一系列文件。

    圖15

    3 完成Quartus工程編譯

    3.1 在Quartus工程中添加Qsys產生的系統模塊。

    1)Quartus中點擊菜單Assignments->Settings,彈出設置框,選中左側Files一欄,添加Qsys文件soc_led.v和soc_led.qip,添加完成後如圖16所示。

    圖16

    2)新建頂層文件。本實驗採用的頂層文件類型為bdf(Block Diagram/Schematic File)。點擊菜單File->New,選擇Design Files中的Block Diagram/Schematic File後點擊OK,點擊菜單File->Save As將該文件保存到工程目錄下,命名為top.bdf。在該原理圖空白處右鍵Insert->Symbol,選擇Qsys生成的soc_led.bsf,將該模塊插入到頂層原理圖文件中。選中插入的元件,右鍵點擊Generate Pins for Symbol Ports,為元件添加輸入輸出埠,如圖17所示。

    圖17

    3.2 工程分析綜合後分配引腳

    完成以上步驟後,需要分配引腳,包括HPS外設默認引腳分配以及FPGA部分引腳分配,在分配引腳之前,工程必須通過分析綜合,否則引腳分配會出錯。

    圖18

    然後按2)所示Tcl Scripts工具執行上面編寫的腳本,完成FPGA部分LED引腳的分配。

    3.3 工程編譯。

    完成以上所有操作後,可以點擊菜單Processing->Start Compilation對工程進行完全編譯。編譯成功後會生成FPGA編程所需的.sof文件。

    4 完成FPGA編程。

    這里只介紹採用JTAG方式完成FPGA編程方式,注意這種方式下,FPGA編程電路斷電後就丟失。

    點擊菜單Tools->programmer,打開編程工具,選擇連接至計算機的DE10開發板,如圖19所示。Close硬體設置框。編程頁面中Mode選擇JTAG,點擊Auto Detect按鈕,在彈出的器件選擇框中選擇相應的器件型號,DE10-Standard板載FPGA型號應選擇5CSXFC6D6。選中FPGA設備,點擊Change FIle,選中編譯生成的top.sof文件,如圖20所示。然後勾選Program/Configure,如圖21所示。最後點擊Start按鈕開始編程。

    圖19

    圖20

    圖21

    實驗細節注意:

    在分配引腳之前必須先對工程進行分析綜合(Analysis and Synthesis)

    第二步:使用SOCEDS完成HPS軟體開發

    說明:

    該步驟完成HPS軟體部分的開發,SOC EDS提供了全套的軟體開發工具。本實驗只是通過HPS控制FPGA部分的IO口,系統架構簡單,採用裸機開發方法。DS-5為SoC FPGA裸機開發提供了兩套編譯工具:ARM Compiler 和 Altera Baremetal GCC。本實驗採用ARM Compiler。

    實驗步驟

    1 運行軟體開發工具DS-5。

    打開Embedded_Command_Shell.bat,輸入eclipse &命令回車,打開DS-5開發軟體。如圖1所示。 DS-5界面如圖2所示。

    圖1

    圖2

    2 新建C Project

    點擊菜單File->New->C Project,彈出工程配置框如圖3所示,按圖完成設置,注意編譯工具鏈選擇ARM Compiler 5

    圖3

    3 工程編譯選項設置

    3.1 添加HWLIB路徑

    因為本實驗用到了SOC EDS提供的HWLIB中的API訪問硬體,所以要在項目編譯選項中添加HWLIB路徑。HWLIB所在路徑為:<SOC EDS安裝路徑>ipalterahpsaltera_hpshwlibinclude 和 <SOC EDS安裝路徑>ipalterahpsaltera_hpshwlibincludesoc_cv_av

    操作:在DS-5左側的Project Explorer中選中LedWater工程,右鍵點擊Properties。彈出的對話框按圖4設置,完成HWLIB路徑的添加。

    圖4

    3.2為工程編寫分散文件scatter。

    scatter文件為連接器指定映像的內存映射。本實驗中,映像文件的載入區和執行區都在HPS的片內RAM上,而HPS片內RAM的地址映射為0xFFFF0000-0xFFFFFFFF,所以編寫分散文件內容如下,分散文件編寫完成後添加到編譯選項中。

    OCRAM 0xFFFF0000 0x1000

    {

    APP_CODE +0

    {

    *(+RO, +RW, +ZI)

    }

    ARM_LIB_STACKHEAP 0xFFFF8000 EMPTY 0x8000

    {}

    }

    操作:點擊菜單File->New->Other,彈出對話框,按圖5操作。打開新建的scat文件,輸入上面的分散文件內容。在DS-5左側的Project Explorer中選中LedWater工程,右鍵點擊Properties。彈出的對話框按圖6設置,完成scat文件路徑的添加。

    圖5

    圖6

    4 生成硬體設備描述頭文件。

    利用SOC EDS提供的swinfo2header工具,將Qsys硬體系統信息轉換為軟體開發所需的設備描述頭文件。

    操作:在嵌入式命令行shell中cd到soc_led.sopcinfo所在目錄,然後輸入如下命令:sopc-create-header-files soc_led.sopcinfo --single hps_0.h --mole hps_0如圖7所示,同目錄下將會生成名為hps_0.h的頭文件,將其拷貝至軟體工程目錄下。

    圖7

    5 編寫main.c

    為工程新建main.c文件,輸入main.c代碼,代碼如下:

    #include "hwlib.h"

    #include "socalsocal.h"

    #include "socalhps.h"

    #include "hps_0.h"

    void delay(int delay_time)

    {

    int k;

    for(k=0; k<delay_time; k++) ;

    }

    int main()

    {

    int i = 0x1;

    while(1)

    {

    alt_write_word( ALT_LWFPGASLVS_OFST+LED_PIO_BASE, i );

    if( (i&0xf) == 0x8 ) i=0x1;

    else

    i = i<<1;

    delay(100000000);

    }

    return 1;

    }

    6 工程編譯連接

    在DS-5左側的Project Explorer中選中LedWater工程,右鍵點擊Build Project,生成可執行文件ledWater.axf。

    7 生成preloader

    裸機工程中,preloader即u-boot-spl。在shell中輸入bsp-editor啟動工具,如圖8所示。在打開的bsp-editor工具中,點擊菜單File->New HPS BSP,選擇handoff文件目錄,如圖9所示。設置中取消勾選WATCHDOG_ENABLE選項,如圖10所示,因為我們沒有在裸機應用程序中用到看門狗。設置完成後點擊generate,產生我們設置的preloader源代碼,生成的源代碼路徑顯示在Information欄中。Shell中cd到preloadre源代碼目錄下,輸入make -j8 (多線程編譯提高編譯效率),如圖11所示,回車生成preloader二進制文件,需要等待幾分鍾。在<Quartuas工程目錄>softwarespl_bspuboot-socfpgaspl目錄下,可以看到已經生成了u-boot-spl二進制文件。將其拷貝至LedWater工程目錄下。

    圖8

    圖9

    圖10

    圖11

    8 編寫調試腳本

    為LedWater工程新建調試腳本,步驟如圖12所示。打開新建的文件輸入以下內容。

    reset system

    stop

    wait 30s

    set semihosting enabled false

    loadfile "$sdir/u-boot-spl" 0x0

    set semihosting enabled true

    delete

    tbreak spl_boot_device

    run

    wait

    loadfile "$sdir/Debug/ledWater.axf"

    Start

    圖12

    完成以上所有操作後,工程目錄應該如圖13所示。

    圖13

    9 工程調試。

    1) 在進行工程調試前,首先要確保板卡連接至計算機,並先下載硬體sof文件至fpga。然後新建調試配置項,選中LedWater工程,右鍵選擇Debug As->Debug Configurationz,彈出會話框,按圖14和圖15設置。設置完成後點擊Debug開始調試。

    圖14

    圖15

    2)進入調試頁面後,如圖16所示,點擊紅圈中Continue圖標,開始運行main程序,DE10開發板上的4個LED燈依次循環點亮。

  • 編寫fpga部分的外設引腳分配腳本。根據硬體板卡的實際連接關系,編寫引腳分配腳本,本實驗用到DE10-Standard板卡上的4個LED,參考原理圖,編寫腳本如下:

    set_location_assignment PIN_AA24 -to fpga_led_pio_export[0]

    set_location_assignment PIN_AB23 -to fpga_led_pio_export[1]

    set_location_assignment PIN_AC23 -to fpga_led_pio_export[2]

    set_location_assignment PIN_AD24 -to fpga_led_pio_export[3]

    set_location_assignment PIN_AF14 -to clk_clk

  • 菜單點擊Processing->Start->Start Analysis & Synthesis開始分析綜合。

  • 分析綜合完成後,點擊菜單Tools->Tcl Scripts,彈出腳本運行框,如圖18所示。分別運行hps_sdram_p0_parameters.tcl和hps_sdram_p0_pin_assignments.tcl。

② zynq 如何寫driver

步驟:
1. 首先在vivado SDK中分別建立兩個工程

注意:如上圖所示,Core0 工程建立時選擇ps7_cortexa9_0, Core1 工程建立時選擇ps7_cortexa9_1

完成後如下圖所示:

2.配置Core1即從核中的BSP文件

在下圖中畫圈處,配置:-DUSE_AMP=1

3 配置Core0和Core1的DDR空間分配

通過修改lscript.ld文件中的內容,可以改變在存儲器中的執行位置,
因為ELF文件是載入到DDR中執行的,所以兩個DDR地址不能重合

Core0的配置 :畫圈處 棧空間也要分配,防止溢出

Core1配置

4 建立FSBL文件,並配置mian()文件

配置main() 跟第三步中的DDR空間配置有關

在FSBL的src中找到main.c文件打開,在裡面添加下面一段代碼,用於啟動CPU1:

#define sev() __asm__("sev")

#define CPU1STARTADR 0xFFFFFFF0 //Core1 DDR配置中的SIZE大小

#define CPU1STARTMEM 0x10000000 //Core1 DDR配置中的起始地址

void StartCpu1(void)

{

#if 1

Xil_Out32(CPU1STARTADR, CPU1STARTMEM);

dmb(); //waits until write has finished

sev();

#endif

}

將上面的代碼在main()中添加到:

Load boot image的位置,將CPU1的啟動函數,放置於此位置,改動後的代碼段如下:

5 生成mcs文件和燒寫mcs文件到QSPI Flash

單擊『Core1』,選擇Xilinx Tools –> Create zynq boot image,選擇Add,選擇文件…/ Core1/Debug/ Core1.elf,點擊打開。然後選擇Core1.elf, Core0.elf在Core1.elf上面。然後在Output pach後面把boot.bin修改為Boot.mcs。然後點擊 Create Image

選擇Core0

選擇文件生成存儲地址

選擇MCS

畫圈處是添加的文件

順序為:FSBL.elf .bit文件 Core0.elf Core1.elf

點擊Create Image 生成.mcs文件

6 完成操作 將 .MCS 文件燒寫進板子里

bin文件用來燒寫到SD卡,mcs文件用來燒寫到QSPI flash中 ,

選擇Xilinx Tools –> Program Flash,在Image File後面選擇剛才生成的Boot.mcs文件,Offset為0x0,Flash Type為qsip_single。勾選Blank check after erase和Verify after flash。檢查開發板上電和連線狀況,然後點擊Program

③ devicetree的qspi flash怎麼寫

JFFS2是Flash上應用最廣的一個日誌結構文件系統。它提供的垃圾回收機制,不需要馬上對擦寫越界的塊進行擦寫,而只需要將其設置一個標志,標明為臟塊,當可用的塊數不足時,垃圾回收機制才開始回收這些節點。同時,由於JFFS2基於日誌結構,在意外掉電後仍然可以保持數據的完整性,而不會丟失數據。 本文闡述如何在nand flash上實現JFFS2根文件文件系統。實驗環境是:FS2410開發平台及ubantu7.04主機環境。 由於使用的ubantu7.04的環境沒有安裝製作JFFS2文件系統鏡像的工具mkfs.jffs2,所以首先在Linux系統中安裝mkfs.jffs2工具,安裝的過程如下: 1.下載MTD工具包 本處使用的是mtd-snapshot-20050519.tar.bz2: farsight#tar –jxvf mtd-snapshot-20050519.tar.bz2 farsight#cd mtd farsight#./configure farsight#make farsight#make install 如果系統中沒有安裝ZLIB庫,那麼首先安裝ZLIB庫。具體的安裝過程如下: farsight#tar –zxvf zlib-1.2.3.tar.gz farsight#cd zlib-1.2.3 farsight#./configure farsight#make farsight#make install 完成此步驟後,系統中就有了mkfs.jffs2的工具。注意:這個工具不同於mkfs.ext2工具,它只能製作相應的JFFS2文件系統的鏡像,而不具有進行格式化的功能,而mkfs.ext2具備這以上兩種功能。然後用這個工具就可以製作JFFS2文件系統的鏡像了。 2、製作JFFS2文件鏡像 實驗平台用到的nand flash 是K9F1208,在製作鏡像過程添加的參數需要和它對應。 farsight#mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000 -n 這樣就會生成一個8M大小的rootfs.jffs2的鏡像,它也正是JFFS2文件系統的鏡像,關於這個命令行里的選項的內容,可以用man a mkfs.jffs2命令來查看內容。 JFFS2 維護了幾個鏈表來管理擦寫塊,根據擦寫塊上的內容,一個擦寫塊會在不同的鏈表上。具體來說,當一個擦寫塊上都是合法(valid)的節點時,它會在 clean_list 上;當一個擦寫塊包含至少一個過時(obsolete)的節點時,它會在 dirty_list 上;當一個擦寫塊被擦寫完畢,並被寫入 CLEANMARKER 節點後,它會在 free_list 上。而當你在掛載這個文件系統的時候,如果出現CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0的警告的時候,可以加一個「-n」的選項,這個主要是由於針對Nand Flash不需要在每個擦除塊的開始寫入CLEANMARKER 節點。 3、設置內核啟動參數 本處用的bootloader是U-BOOT.所以在U-BOOT的命令終端設置如下: FS2410#setenv bootargs root=/dev/mtdblock/2 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M 4、配置內核支持JFFS2文件系統 File Systems ---> Miscellaneous filesystems ---> JournallingFlash File System v2 (JFFS2) support [*]JFFS2write-bufferingsupport [*] [*]JFFS2ZLIBcompressionsupport [*]JFFS2RTIMEcompressionsupport [*] JFFS2 RUBIN compression support 5、下載rootfs.jffs2鏡像 下載到Nand Flash第二個分區。 FS2410#nand erase 200000 800000 FS2410#nand write.jffs2 300008000 200000 800000 這里說明下關於nand flash操作的幾個常用命令的含義 nand write:向Nand Flash寫入數據,如果NandFlash相應的區域有壞塊,則直接報錯。 nand write.jffs2:向Nand Flash寫入數據,如果NandFlash相應的區域有壞塊,可以跳過壞塊。 nand read:讀取Nand Flash相應區域的數據,如果NandFlash相應的區域有壞塊,則直接報錯。 nand read.jffs2s:讀取Nand Flash相應區域的數據,如果NandFlash相應的區域有壞塊,將對應壞塊區域的緩沖填充0xff,然後跳過此壞塊繼續讀取。 nand read.jffs2:讀取Nand Flash相應區域的數據,如果NandFlash相應的區域有壞塊,直接跳過壞塊。 具體的參考代碼參看U-BOOT源碼:common/cmd_nand.c文件。 下載完JFFS2文件系統鏡像後,需要把Linux內核NandFlash的驅動關於第二個分區的大小改為8M(和鏡像一樣大),否則會出現類似如下錯誤: Freeing init memory: 124K Warning: unable to open an initial console. Argh. Special inode #171 with mode 0xa1ff had more than one node Kernel panic: No init found. Try passing init= option to kernel. Argh. Special inode #63 with mode 0xa1ff had more than one node Returned error for crccheck of ino #63. Expect badness... Argh. Special inode #67 with mode 0xa1ff had more than one node Returned error for crccheck of ino #67. Expect badness... Argh. Special inode #68 with mode 0xa1ff had more than one node 到此,一個JFFS2文件系統的鏡像製作成功。可以啟動系統並測試JFFS2的性能了 還有一種製作JFFS2文件系統鏡像的方法,在製作鏡像的參數中可以不加—pad選項,過程如下: farsight#mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 -n 啟動開發板燒寫rootfs.jffs2鏡像 FS2410#nand erase 200000 800000//(注意把整個存放文件系統的分區全部給擦除)。 FS2410#nand write.jffs2 30008000 200000 31a28c//(必須是rootfs.jffs2的實際大小。如果是你寫成了4M,那麼分區的其餘部分JFFS2文件系統將無法識別)。

④ zynqmp 怎麼將linux系統下載到emmc

1,vivado硬體配置,要選擇EMMC代表的SD1;

2,編譯petalinux:執行petalinux-config。

(1)選擇Subsystem AUTO Hardware Setting

-> Advanced bootable images storage settings

->boot image settings;

選擇primary flash,這里是將BOOT.bin設置為從qspi flash啟動

(2)選擇Subsystem AUTO Hardware Setting

-> Advanced bootable images storage settings

->kernel image settings;

選擇primary sd,進入後我們看到這里實際就是設置image.ub的存放區域。

(3)選擇Image Packaging Configuration,設置啟動啟動文件系統所在位置;

在設置啟動方式的時候,如下兩張圖這樣設置讀取根文件系統的位置/dev/mmcblk1p2。

(4)設置你的驅動然後編譯,依次執行:petalinux-config -c kernel;petalinux-config -c rootfs;

petalinux-build;petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force;

3,做之前先分區(把EMMC分區),先做一個SD卡啟動的petalinux文件,

petalinux系統在zynq上面啟動起來以後就進行如下分區:即是mmcblk1分為mmcblk1p1和mmcblk1p2

具體步驟如下:

(1) 把EMMC進行分區,執行命令: fdisk /dev/mmcblk1

(2)使用n命令,添加一個新的分區

Command (m for help): n

Command action

e extended

p primary partition (1-4)

選擇p,添加主分區

,(3)選擇分區號,選擇1,

Partition number (1-4): 1 // 選擇分區號

First cylinder (1-238592, default 1): Using default value 1 // 選擇分區的第一個柱面,選擇1

Last cylinder or +size or +sizeM or +sizeK (1-238592, default 238592): Using default value 238592 // 選擇最後一個柱面

注意:1-238592,first要選第一個數,last要選擇的比238592小,其中1024就是表示1M

(4)使用t命令,設置分區格式

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)
(5)使用w命令,保存配置,必須保存配置

Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table

(6)使用對應文件系統工具對分析進行格式化(只能在debian裡面才能識別命令)

mkfs.fat /dev/mmcblk1p1 設置為fat32格式

mkfs.ext4 /dev/mmcblk1p2設置為ext4格式

注意:執行完w命令然後才算分區成功,執行完mkfs命令才算格設置內存屬性成功。

以上分區完成後,可以使用p命令,顯示分區信息;也可以使用用d命令表示刪除分區

Command (m for help): p

Disk /dev/mmcblk0: 7818 MB, 7818182656 bytes

4 heads, 16 sectors/track, 238592 cylinders

Units = cylinders of 64 * 512 = 32768 bytes

Device Boot Start End Blocks Id System

/dev/mmcblk0p1 1 238592 7634936 83 Linux

(7)執行這句:mkdosfs -F 32 /dev/mmcblk0p1

當然,可以重復上述步驟,多分幾個區,用來存放不同的狀態:

FLASH要要用來存放BOOT.bin

第一個分區用來存放image.ub或者設備樹(比如uImage和devicetree.dtb)等文件;--可以設置為128MB

第二個分區用來存放用戶數據(比如可執行程序);可以設置為2048MB

第三個分區用來存放程序執行需要的庫文件(opencv的庫,qtcreator庫,相機庫,視頻編碼解碼庫等);剩餘的1個多GB

4,把系統同步到ext4裡面

先把sd卡裡面系統掛載進來 :mount /dev/mmcblk0p2 /mnt

再把剛剛弄好的系統掛進來: mount /dev/mmcblk1p2 /tmp , 然後cd /mnt

然後進入把SD卡裡面的系統同步到emmc裡面:rsync -av ./* /tmp ,時間有點久,直到結束為止。

(要是不用SD卡也可以掛載U盤,解壓,然後進行系統同步到EMMC所掛載的地方/tmp)

5,然後將BOOT.BIN和image.ub燒錄到QSPI-FLASH中

首先擦除QSPI-FLASH:flash_eraseall /dev/mtd0

存放BOOT.bin到flash : flashcp BOOT.bin /dev/mtd0

此處若是將image.ub寫入emmc的FAT分區中(不存放到flash中),先使用mount掛載eMMC的FAT分區,

然後將image.ub使用cp指令拷貝進 /mnt/mmcFat即可,也就是把uImage 拷貝到 /dev/mmcblk1p1;

進入uImage所在目錄,然後執行 cp uImage /tmp;也就是把uImage存放到了 /dev/mmcblk1p1裡面。

6,最後斷電拔出SD卡,將撥碼開關設置為flash啟動,就能看到petalinux啟動起來;

7,報錯及其解決辦法

————————————————
版權聲明:本文為CSDN博主「寒聽雪落」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangjie36/article/details/104740448/

⑤ 大家覺得明遠智睿ls1012A只能從qspi啟動,這樣處理,是安全的考慮嗎

你好是的,這種情況是從安全方面考慮的,
這樣是好一些。

⑥ imx6ul 官方開發板qspi nor 啟動linux 怎麼操作

已經手動將ucl2.xml 中Quad Nor Flash 內容改成如下

<LIST name="Quad Nor Flash" desc="Choose Quad Nor flash as media">
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%board%_%nor%.imx" ifdev="MX6Q">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6dl%board%_%nor%.imx" ifdev="MX6D">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6slevk_spi-nor.imx" ifdev="MX6SL">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6sx%sxuboot%_sd.imx" ifdev="MX6SX">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx7d%7boot%_sd.imx" ifdev="MX7D">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ulevk_qspi1.imx" ifdev="MX6UL">Loading U-boot</CMD>

<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x12000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6DL">Loading Kernel.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL">Loading Kernel.</CMD>

<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x12C00000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6DL">Loading Initramfs.</CMD>
<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL">Loading Initramfs.</CMD>

<CMD state="BootStrap" type="load" file="firmware/zImage-imx6q-%board%-%nordtb%.dtb" address="0x18000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6dl-%board%-%nordtb%.dtb" address="0x18000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6D">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6sl-evk.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6sx-%sxdtb%.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SX">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx7d-%7ddtb%.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX7D">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-14x14-evk.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6UL">Loading device tree.</CMD>

<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

<CMD state="Updater" type="push" body="$ flash_erase /dev/mtd0 0 20">Erasing Boot partition</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6q%board%_%nor%.imx" ifdev="MX6Q">Sending U-Boot</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6dl%board%_%nor%.imx" ifdev="MX6D">Sending U-Boot</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6slevk_spi-nor.imx" ifdev="MX6SL">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6sx%sxuboot%_%sxnor%.imx" ifdev="MX6SX">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx7d%7boot%_%7dnor%.imx" ifdev="MX7D">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push" body="send" file="files/u-boot-im

⑦ qspiflash怎麼退出XIP模式

你選的是quad spi flash ,應該使用並行的nor flash吧,不然就可以直接用spi配置fpga了, 不需要cpld,需要並行flash的目的就是配置速度。

⑧ stm32h7 spi不啟動,但模擬可以啟動

可能是復位管腳被強制拉高或者拉低了。
STM32的QSPI外設同樣支持單線模式(兼容普通spi),只是相比普通的spi少了一些特性。
掃描隧道顯微鏡(Scanning Tunneling Microscope, 縮寫為STM)是一種掃描探針顯微術工具,掃描隧道顯微鏡可以讓科學家觀察和定位單個原子,它具有比它的同類原子力顯微鏡更加高的解析度。STM使人類第一次能夠實時地觀察單個原子在物質表面的排列狀態和與表面電子行為有關的物化性質,在表面科學、材料科學、生命科學等領域的研究中有著重大的意義和廣泛的應用前景,被國際科學界公認為20世紀99年代世界十大科技成就之一。隧道針尖的結構是掃描隧道顯微技術要解決的主要問題之一。針尖的大小、形狀和化學同一性不僅影響著掃描隧道顯微鏡圖像的解析度和圖像的形狀,而且也影響著測定的電子態。針尖的宏觀結構應使得針尖具有高的彎曲共振頻率,從而可以減少相位滯後,提高採集速度。如果針尖的尖端只有一個穩定的原子而不是有多重針尖,那麼隧道電流就會很穩定,而且能夠獲得原子級分辨的圖像。針尖的化學純度高,就不會涉及系列勢壘。例如,針尖表面若有氧化層,則其電阻可能會高於隧道間隙的阻值,從而導致針尖和樣品間產生隧道電流之前,二者就發生碰撞。制備針尖的材料主要有金屬鎢絲、鉑-銥合金絲等。鎢針尖的制備常用電化學腐蝕法。而鉑- 銥合金針尖則多用機械成型法,一般 直接用剪刀剪切 而成。不論哪一種針尖,其表面往往覆蓋著一層氧化層,或吸附一定的雜質,這經常是造成隧道電流不穩、噪音大和掃描隧道顯微鏡圖象的不可預期性的原因。因此,每次實驗前,都要對針尖進行處理,一般用化學法清洗,去除表面的氧化層及雜質,保證針尖具有良好的導電性。