1、前言
上期我們介紹了STM32N6中的FSBL工作原理及其應(yīng)用,本期我們介紹STM32N6570中如何將程序下載到外部Flash并利用FSBL進行引導(dǎo)。
2、CubeMX配置
STM32N6570DK中的外部flash通過XSPI通訊,因此我們需要開啟XSPI2,這是連接到第一塊(總共兩塊)內(nèi)存的接口。
通訊方式選用Octo SPI,這是一種八線并行SPI通訊,與傳統(tǒng) SPI 的 1 線(標準 SPI)、4 線(Quad SPI)相比,數(shù)據(jù)通道數(shù)量大幅增加,同一時間的傳遞數(shù)據(jù)量大幅度提升。參數(shù)具體配置如下:
配置XSPIM模式如上圖所示。
外部內(nèi)存管理中使能存儲管理,接下來設(shè)置一下引導(dǎo)程序。
勾選生成引導(dǎo)程序后,選擇FSBL+XPI即Appli的程序在外部Flash中直接使用,而不是鏡像到內(nèi)部Flash使用。
設(shè)置Application offset為0x100000,這代表著我們的外部Flash程序為0x70000000+0x00100000為0x70100000,這是等會我們要下載到的外部Flash的地址。
內(nèi)存設(shè)置中使用八線模式連接。
將之前攝像頭和LCD的應(yīng)用程序配置為Application中。
設(shè)置XSPI的時鐘為50MHZ,這樣子就完成了CubeMX中的所有配置了。
3、源代碼
這里要注意到利用CubeMX生成時會提示是否使用非安全域,上述CubeMX的配置均在安全域中進行。
但是如果我們在創(chuàng)建CubeMX中使用非安全域的話,那么在上述流程生成的代碼中將會出現(xiàn)一些需要注意的地方。
這時候工程會包含F(xiàn)SBL和Appli兩個,在FSBL的工程中,main.c執(zhí)行完CubeMX中的初始化(FSBL部分)單片機將程序跳轉(zhuǎn)至Appli中的部分。
Appli工程中執(zhí)行我們的主要程序。
但是如果我們是在非安全域中的話,AppliSecure(安全域的Application)將會多出來一段代碼。
在Appli工程中,他將會暫時禁用系統(tǒng)滴答定時器并跳轉(zhuǎn)到非安全域中進行初始化,不過不知道為什么在跳轉(zhuǎn)過程中會出現(xiàn)異常,可能和非安全域那部分的配置有關(guān)系。
總之這段內(nèi)容還得再研究一下,工程先使用安全域中進行。
編譯完后可以找到兩個二進制bin文件,分別是工程名_FSBL/Appli.bin。我們需要使用STM32CubeProgram工具對這兩個文件進行簽名和下載。
STM32_SigningTool_CLI.exe -bin?F:CodeSTM32CodeSTM32N67XTemplate_Appli.bin?-nk -of?0x80000000?-t fsbl -o F:CodeSTM32CodeSTM32N67XAppli-trusted.bin?-hv?2.3?-dump F:CodeSTM32CodeSTM32N67XAppli-trusted.bin
在CMD命令行中輸入上述代碼,對指定文件進行簽名,這里需要讓STM32_SigningTool_CLI.exe的路勁添加到系統(tǒng)路徑,否則就需要用絕對路徑來尋址。
簽名完成后就可以獲得這兩個簽名文件(文件名是自己定的)
CubeProgram中下載算法選擇STM32N6570DK的外部Flash下載算法。
開發(fā)板的BOOT1置高之后,將FSBL的bin文件(簽名后)下載到0x70000000中,將Appli的代碼下載到0x70100000中。然后將BOOT1重新設(shè)置為低電平,就可以從外部Flash啟動代碼了。