一、 概述
本文主要介紹 SemiDrive E3430 在使用 NOR Flash 時,需要進行的配置修改。
關於 E3 已經適配的 memory 型號,參考《SemiDrive_Memory 支持列表》文檔。
二、 背景
SemiDrive E3430 的參考板和工程,使用的為 Hyper Flash,如果需要改為使用 NOR Flash,需要對項目工程進行修改。
三、 代碼下載及步驟介紹
使用 SemiDrive support 系統上的 SSDK Builder ,生成 E3430 的參考代碼,選擇 app_demo/flashloader 、driver_demo/spi_nor 和 driver_demo/gpio 示例。
先讀取 Flash ID ,添加對應 Flash ID 配置,然後生成 flashloader 文件並替換,使用 gpio 示例進行燒錄測試。
分別說明使用 SSDK 軟體包和 MCAL 軟體包時所需修改的內容。
四、 讀取 Flash ID
使用 NOR Flash 時,使用 SSDK drive_demo/spi_nor 文件夾下的示例測試 Flash 並讀取 Flash ID 。如果使用的是 Hyper Flash,則使用 SSDK drive_demo/hyperbus 文件夾下的示例。
將項目工程使用 download and debug 方式燒錄代碼至 ram 中測試 flash 。
- 使用 spi_nor / spi_nor_interrupt 示例測試得到的串口信息如下。如無串口,則在執行 sdrv_spi_nor_get_info(&flash) 後,查看結構體 flash 中的 info – flash_id 。讀取的 NOR Flash ID 為 0x9d,0x60,0x18。
圖 4.1 spi_nor_interrupt 示例 log 信息
- 使用 hyperbus / hyperbus_interrupt 示例測試得到串口信息如下。
分別使用 Legacy X1、CFI 和 SFDP 三種接口協議讀取 Hyper Flash 的 ID。根據 Flash 手冊,協議 SFDP 讀取的 ID 是正確的,Hyper Flash ID 為 0x34,0x7b,0x1a。
圖 4.2 hyperbus_interrupt 示例 log 信息
五、 Flashloader 文件生成、使用
Flashloader 的文件使用 SSDK 示例中的 app_demo/flashloader 工程來生成。
- 修改drivers/source/spi_nor/sdrv_spi_nor.c 文件,添加對應 flash_id 的配置,如此處使用的 Flash ID 為 {0xEF, 0x60} ,與 SSDK 3.0 中 flash id = { 0XEF , 0x40 } 兼容,則複製 flash id = { 0XEF , 0x40 } 的配置,生成一份 flash id = { 0XEF , 0x60 } 的配置。或者根據使用的 NOR Flash 數據手冊,修改配置信息,建議使用《SemiDrive_Memory 支持列表》文檔中已經適配過的 memory。
圖 5.1 flash_id 配置
- 因為默認 E3430 工程配置為 Hyper Flash,修改 flashloader 的工程配置,在IAR 中右鍵項目選擇 Options – C/C++ Compiler – Extra Options。修改宏定義 DCONFIG_HYPERBUS_MODE 為 0 。
圖 5.2 修改 flashloader 的 IAR 工程配置
- 修改完成後,點擊 make,編譯項目工程,在app_demo\flashloader\IAR\Debug\Exe 下會生成 flashloader.out 文件。
Flashloader 項目中configs\pinmux_cfg.c 默認配置的 UART 串口為 GPIO_Y6(TXD) 和 GPIO_Y7(RXD),在開發板上燒錄程序時,會列印燒錄 log 。如果板子上使用了別的 UART 串口,則修改或添加對應 UART 串口的 pinmux 配置。
- 編譯 flashloader 工程後,將生成的 flashloader.out 文件添加到添加到 devices\E3430\flashloader 文件夾內,直接替換 flashloader_norflash.out,或者修改 sf.flash 和 sfs.flash 文件內對 .out 的引用為新生成的文件,如需燒錄其餘核則修改對應的 .flash 文件。
六、 SSDK 軟體包
- 打開 driver_demo/gpio 項目工程,作為測試工程,進行修改和測試。
- 修改 workspace 下面的標籤,切換模式為 FlashDebug。
圖 6.1 修改 workspace 模式
- 修改項目配置,右鍵點擊 gpio 項目,選擇 Options ,在 Linker – Extra Options 中,修改 sfs 文件配置,由 Hyper Flash 的配置 sfs_s26h-hyperflash.img 改為 NOR Flash 的配置 sfs_mt35-1-1-1.img 或 sfs_is25-1-1-4.img 。
圖 6.2 修改 sfs 配置
sfs 文件列表如下,參考 《SemiDrive E3 SSDK User Guide》文檔。
圖 6.3 sfs 文件列表
- 修改 Debugger – Setup 中 Driver 為 J-link/J-Trace 。
圖 6.4 修改燒錄工具
- 修改 Debugger – Download 中的 flashloader 配置,選擇前面修改過配置的 .board 文件。
圖 6.5 修改 flashloader 配置
- 項目工程 gpio 默認的串口列印為 GPIO_Y6 和 GPIO_Y7 的 UART7 ,如果板子上使用了別的串口,則修改 c/h 文件,及 board.c 中的 CONSOLE_UART 宏定義為實際使用的 UART 串口號。
- 編譯完成後,點擊工具欄 Project – Download – Download active application 下載工程。
- 下載完成後,切換撥碼開關為 0b0000 後上電,如串口列印 SSDK E3 GPIO Demo Start!,示例正常運行,則說明程序已經燒錄在 Flash 中,並成功運行。
七、 MCAL 軟體包
- 在 MCAL 的 tools\IAR_Ddf\flashloader\SemiDrive\3430 路徑下,添加生成的 flashloader.out 文件,直接替換或者修改 sf.flash 和 sfs.flash 文件內對 .out 的引用為新生成的文件。
- 打開 E3_ref_gateway_E3430 的工程,workspace 模式選擇 Debug。
- 如果板子上使用了別的串口,則修改 EB 中的配置,在 PORT 中添加對應的 IO 口配置為 UART 的復用功能,並修改項目工程的配置 C/C++ Compiler – Preprocessor – Defined symbols 中的宏定義 TTY_UART=UART1 為對應的串口號。
圖 7.1 修改 UART 配置
- 參考 6.3 章節修改 Options – Linker 中的 sfs 配置。
- 參考 6.5 章節修改 Debugger – Download 中 board 文件的配置。
- 另外如果需要對 Flash 進行操作,需要修改 EB 中 fls 模塊下的配置,將 OSPIController 下的 OSPIControllerInterface 類型從 HYPERBUS 改為 SPI_NOR,FlsSector 中根據 NOR Flash 數據手冊修改對應 sectors 等參數。另外需要在 mcal\Fls_TS_T01D20M1I4R0\src\spi_nor.c 中添加對應 flash_id 的配置。
- 編譯燒錄,如程序正常運行,則說明程序已經燒錄在 Flash 中,並成功運行。
八、 參考文檔
- 《SemiDrive_E3_SSDK_User_Guide》
- 《SemiDrive_E3_MCAL_User_Guide》
- 《AppNote_E3_Boot_and_OTA》
- 《SemiDrive_Memory 支持列表》
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Eason Wang / 王寅森
更多資訊,請掃碼關注我們!
評論