技術洞察 | 淺談PSOC 6 SMIF的使用——線上燒錄片外Flash

 


1. 基本原理與機制

 

PSOC 6 SMIF存取片外Flash的操作模式,例如《淺談PSOC 6 SMIF的使用(一)——基本功能》文章中介紹了主要的MMIO模式和XIP模式。但如果考慮通過PSoC 6的SWD方式在線燒錄連接在SMIF上的片外Flash內容,這意味著對於PSoC 6來說,片外Flash是可以被尋址的。因此,這裡需要配合XIP模式,將片外Flash的空間映射到PSoC 6能訪問的地址區段,例如之前提到的從0x1800 0000開始的地址區域。

 

要完成整個燒錄的工作,需要從片外 flash 的配置開始。參考文中QSPI Configurator的介紹)、片內工程保存QSPI Data Structure、工程的linker script、燒錄工具配合來完成。參考以下完整的Ecosystem Tool設計

 

 

接下來會自上而下地介紹這裡的基本原理和操作。

 

(1)首先,針對不同的記憶體產品,可以透過QSPI Configurator進行配置或自訂相應的讀寫指令組合,生成對應的指令集合結構體參數:

 

 

自動生成的原始碼檔案:

cycfg_qspi_memslot.c, cycfg_qspi_memslot.h

 

在原始碼中,有對應的結構體映射了實際執行的命令配置集合,例如以下例子中的 deviceCfg_S25FL512S_SlaveSlot_0 就包含了讀寫對應的 QSPI 資料結構。

 

 

>>>詳細說明可點擊此處,參考外部設備驅動程式庫中的對應原始碼。

 

 

(2)在生成了 memslot 資訊後,需要將 PSOC 6 系統的讀寫介面綁定到對應的 QSPI flash 的配置結構體,讓 flash loader 知道在讀寫某個地址片段的資訊時,應使用哪個外部訪問命令來進行操作。這部分需要在 SFlash (0x1600 0000) 區域內進行聲明,而該區域在 PSoC6 中被定義為 Table of Contents part 2 (TOC2)。

 

例子如下,聲明由 QSPI Configurator 配置工具自動生成的 memslot 原始碼中的 smifBlockConfig 的結構體地址指針到指定的區間。

 

 

然後在TOC2固定區域裡(offset = 0x000C)將對應的指標保存進去。編譯後生成的程式碼會自動生成新的TOC2固定配置,燒錄到片內的flash區域後,System Call就能獲取當前配置結構體的指標索引。

 

 

經過以上配置後,就可以實現透過燒錄介面訪問片外的結構體。但這部分目前英飛凌已經提供了現成的中介軟體 serial-flash,使用者只要引用中介軟體,就可以直接使用上面的配置,無需額外重寫上述的存儲結構體。

 

句子: >>>點擊此處,查看詳細參考。

 

 

實現了XIP區域編譯和燒錄的範例,建議參考CY8CPROTO-062S3-4343W這個BSP上使用WiFi的範例。上面使用了CY8C6245LQI-S3D72,具有512KB Flash和256KB SRAM。在需要驅動WiFi模組時,由於WiFi模組的韌體約佔400KB左右的空間,因此需要保存在片外NorFlash上。

 

>>>點擊此處,查看詳細參考

 

 

main.c:

 

 

bsp.mk 裡也需要對應的聲明

 

 

這樣 Wi-Fi 的韌體就會在編譯時指定到 XIP 的地址段。

 

 

在bsp資料夾中提供的PSoC 6的預設連結腳本(例如:GCC的.ld檔案)已經包含了對.cy_xip段的定義描述:

 

2. 燒錄片外 Flash 的注意事項:

 

根據上述章節的描述,我們可以理解以下的讀寫流程:

 

  1. 片外 SPI Flash 的配置結構體保存到片內 Flash,並產生了確定的 &smifBlockConfig 指針。

     

  2. SFlash 相關區域(TOC2)存儲了能索引配置結構體資訊的指針地址(例如:&smifIpBlocksArr)。

     

  3. 這個索引資訊已經生效。

     

  4. 需要燒錄到片外 flash 的內容編譯後能落在 0x18000000 開始的 xip 的地址段(Link Script 已經預設做了相關定義)

     

  5. 燒錄器根據需要燒錄的Hex檔案,當需要燒錄0x18000000 ~ 0x1FFFFFFF這些地址段的區域時,透過DAP介面索引到對應片外Flash的讀取、寫入、擦除等命令,對片外Flash進行訪問和控制。

 

所以,針對這個流程,當想要透過PSoC6燒錄口對片外flash進行直接燒錄時,需要確認以下問題(故障排除):

 

1. 對應的片外 flash 的配置結構體的參數是否正確:

 

  • 命令是否匹配正確的IO數,SPI/Dual-SPI/Quad-SPI 對應的讀寫命令通常是不一致的。需要確認當前配置的 IO 數與命令是否一致。

     

  • Memory擦除的指令是否符合?例如 4KB 區段擦除,或是 64KB 區段擦除,對應的指令和效果會影響燒錄的結果。

     

  • Write Enable 的寄存器位是否正確,Quad Mode 的啟用位或者命令是否匹配。

     

  • 擦除、程式等時間參數是否一致?這裡建議使用對應記憶體資料表中的最大時間來確保擦除和寫入的可靠性。

 

2. 結構體已經燒錄到晶片內,TOC2的結構體有正確的索引指針。基於燒錄的原理,TOC2裡必須包含能索引到命令集合,並且已經生效,否則系統無法確定片外flash的映射地址的操作方式。

 

3.片外 Flash 的介面狀況,有一些使用者在設計時會考慮對片外 flash 進行供電管理控制,比如使用 MCU 的 IO 口來控制 flash 的供電,以達到節省功耗的目的。此時,如果需要考慮片外 flash 的在線燒錄,就需要明確在燒錄進行時片外 flash 的供電情況,確保其處於上電狀態。由於此時 MCU 尚未進入正常的工作邏輯,因此用於管理片外 flash 的 IO 口不一定處於為 flash 打開電源開關的狀態。這時就需要考慮額外的設計來保證片外 flash 的供電,例如:

 

  • 客製化燒錄工具可以在燒錄時明確提供片外的 Flash 電源。

     

  • 設計預設上電,控制IO時可以關閉電源的電路。

     

  • 如果外部電路無法使用預設的上電方式,可以考慮定制 flash loader,來增加 IO 管理的功能,讓片外 flash 先行上電。

 

3. 總結

 

本篇主要簡述了燒錄器(Programmer)通過PSOC 6 SMIF介面對片外SPI Flash進行直接燒錄的基本原理和實現方式,以及需要考慮的注意事項。

如果對PSOC 6 SMIF燒錄片外flash的方式有疑問,歡迎在留言區留言交流。

 

掃描二維碼, 關注英飛淩官微尋找更多應用或產品資訊
 

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

英飞凌: http://mp.weixin.qq.com/s?__biz=MzIwMzQ1MjU2NA==&mid=2247581930&idx=4&sn=0700bb9538d582fec475ec3af5a82dbb&chksm=96ccf911a1bb7007bbaf31556abdc6ba530ef406bc5de4af4909e76a92c55c1bf9007c35803f#rd

評論