你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是串行NOR Flash的頁編程模式對於量產效率的影響。算法
任何嵌入式產品最終都繞不開量產效率話題,尤爲是對於主控是非內置 Flash 型 MCU(好比恩智浦的 i.MXRT 系列、意法半導體的 H7 系列等),單片量產時間直接決定了工廠生產效率,對於那種百萬級出貨量的消費類產品,任何關於量產時間的重大優化都能帶來明顯受益(聽說產線都是按分鐘來計費的)。編程
目前市面上的量產方案主要以下三類,其中方案二是最通用靈活的方式,由於其下載算法可由用戶自由調整,因此這種量產方案下產品最終 Flash 型號選擇上相對不受限。緩存
- 方案一:利用專門的編程器直接對 Flash 進行離線燒錄,不須要鏈接目標 MCU;
- 方案二:利用通用的調試器鏈接目標 MCU 板卡對 Flash 進行在線燒錄;
- 方案三:利用目標 MCU 裏的廠商/自定義 Bootloader 對 Flash 進行在線燒錄;
說到下載算法設計,就離不開 Flash 擦寫命令模式,其中寫命令是 Page Program(頁編程),即一次性寫入一個 Page 大小的數據塊到 Flash 中。咱們知道關於 Flash 讀命令有很是多的模式(Single, Dual, Quad, Octal, SPI/QPI, SDR/DTR等),而對於 Flash 寫命令,從手冊裏看模式寥寥無幾,爲何寫命令模式這麼少?不一樣寫命令模式有何區別?痞子衡今天從其對量產時間/效率的影響角度跟你們聊一聊:微信
下圖是我們前面提到的量產方案二的功能示意簡圖,這裏目標 MCU 是以恩智浦 i.MXRT 系列來示例的,調試器就以 Segger J-Link 爲例,上位機量產軟件即 Segger J-Flash。量產時間一共由三部分時間共同決定:函數
- 時間一:上位機軟件 J-Flash 調度時間(將用戶程序二進制文件分包經過 USB 口發送給調試器硬件,並與調試器實時交互);
- 時間二:硬件調試器 J-Link 中轉時間(調試器從 USB 口收到上位機傳來的一包包用戶程序數據後,經過 SWD/JTAG 口轉存到目標 MCU - i.MXRT 的內部 RAM 中);
- 時間三:目標 MCU - i.MXRT 執行下載算法時間(執行下載算法中的擦寫函數,將 RAM 中緩存的用戶程序數據寫入 Flash 中);
最終量產總時間並非簡單的三部分時間之和,這三部分時間之間其實是互有交疊的,簡單地說,量產過程是以流水線方式進行的。時間1、二主要取決於 Segger 的設計,咱們輕易沒法改動,而時間三是咱們能夠量化和分析改進的地方,本文要討論的也是這個時間三。優化
經常使用的 NOR Flash 一共有三類:QSPI、OctalFlash、HyperFlash,這三類 Flash 關於 Page Program 模式設計本質上都同樣(Hyper Flash目前一線寫模式暫時還不支持),咱們就以最多見的 QSPI 爲例來介紹。下圖是典型的 QSPI Flash IS25WP064A 支持的所有三種寫模式:Single SPI Page Program(命令地址數據全在 IO0 上傳輸),Quad Input Page Program(命令地址在 IO0 上傳輸,數據在 IO[x:0] 上傳輸)、QPI Page Program(命令地址數據全在 IO[x:0] 上傳輸)。spa
- 注:四線 Flash,QPI 模式是傳輸效率最高的模式,八線 Flash,OPI 模式是傳輸效率最高的模式。
單從頁數據傳輸的角度而言,QPI Page Program 效率最高,Single SPI Page Program 效率最低,相同 Flash 工做頻率下,前者所花時間僅後者的 1/4(若是是Octal/Hyper Flash,則是 1/8)。按道理在量產過程當中應儘量選擇 QPI/OPI 模式並以最高 Flash 工做頻率去作 Page Program,但實際量產過程當中每每是 Single SPI 模式且較低 Flash 工做頻率去 Page Program 用得更多,這是爲何?繼續往下看。.net
帶着上一節留下的疑問,咱們從幾個實際 Flash 型號入手,根據手冊裏給的 AC 特性數據來量化分析下 Flash 量產時間,擦寫等待時間均選用典型值,而後分別以 50MHz Single SPI 模式 和 最高頻率 QPI/OPI 模式 Page Program 來看二者帶來的差別有多大。設計
首先出場的是來自芯成的 IS25WP064A,這是一顆最高工做頻率爲 133MHz,頁大小是 256Bytes,總存儲空間大小是 8MB 的 Flash。3d
- 50MHz Single SPI SDR 模式下單頁數據傳輸時間 = (8bit + 24bit + 256 * 8bit) / 50Mbps = 41.6us
- 133MHz QPI SDR 模式下單頁數據傳輸時間 = (8bit + 24bit + 256 * 8bit) / 4 / 133Mbps = 3.91us
程序長度 | 數據傳輸時間 | Program總等待時間 | Erase總等待時間 | 量產總時間T3 | ||
---|---|---|---|---|---|---|
50MHz Single SPI SDR | 133MHz QPI SDR | 50MHz Single SPI SDR | 133MHz QPI SDR | |||
4KB | 665.6us | 62.556us | 0.2ms * 16 = 3.2ms | 70ms * 1 = 70ms | 73.8656ms | 73.262556ms |
4MB | 681.574ms | 64.058ms | 0.2ms * 16384 = 3.2768s | 0.1s * 128 = 12.8s | 16.758374s | 16.140858s |
4MB | 681.574ms | 64.058ms | 0.2ms * 16384 = 3.2768s | 0.15s * 64 = 9.6s | 13.558374s | 12.940858s |
8MB | 1.36315s | 128.115ms | 0.2ms * 32768 = 6.5536s | 16s | 23.91675s | 22.681715s |
其次出場的是來自旺宏的 MX25UM51345G,這是一顆最高工做頻率爲 200MHz,頁大小是 256Bytes,總存儲空間大小是 64MB 的 Flash。
- 50MHz Single SPI SDR 模式下單頁數據傳輸時間 = (8bit + 32bit + 256 * 8bit) / 50Mbps = 41.76us
- 200MHz OPI SDR 模式下單頁數據傳輸時間 = (16bit + 32bit + 256 * 8bit) / 8 / 200Mbps = 1.31us
程序長度 | 數據傳輸時間 | Program總等待時間 | Erase總等待時間 | 量產總時間T3 | ||
---|---|---|---|---|---|---|
50MHz Single SPI SDR | 200MHz OPI SDR | 50MHz Single SPI SDR | 200MHz OPI SDR | |||
4KB | 668.16us | 20.96us | 0.15ms * 16 = 2.4ms | 25ms * 1 = 25ms | 28.06816ms | 27.42096ms |
32MB | 5.4736s | 0.171704s | 0.15ms * 131072 = 19.6608s | 0.22s * 512 = 112.64s | 137.7744s | 132.472504s |
64MB | 10.9471s | 0.343409s | 0.15ms * 262144 = 39.3216s | 150s | 200.2687s | 189.665009s |
最後出場的是來自賽普拉斯的 S26KS512S,這是一顆最高工做頻率爲 166MHz,頁大小是 512Bytes,總存儲空間大小是 64MB 的 Flash(這是第一代Hyper Flash,不支持一線寫模式,聽說後面新一代會支持)。
- 50MHz DTR 模式下單頁數據傳輸時間 = (64bit * 4 + 256 * 64bit + 64bit) / 8 / 2 / 50Mbps = 20.88us
- 166MHz DTR模式下單頁數據傳輸時間 = (64bit * 4 + 256 * 64bit + 64bit) / 8 / 2 / 166Mbps = 6.289us
程序長度 | 數據傳輸時間 | Program總等待時間 | Erase總等待時間 | 量產總時間T3 | ||
---|---|---|---|---|---|---|
50MHz DTR | 166MHz DTR | 50MHz DTR | 166MHz DTR | |||
256KB | 10.691ms | 3.22ms | 0.475ms * 512 = 0.2432s | 0.93s * 1 = 0.93s | 1.18389s | 1.17642s |
32MB | 1.3684s | 0.412166s | 0.475ms * 65536 = 31.1296s | 0.93s * 128 = 119.04s | 151.538s | 150.582s |
64MB | 2.7368s | 0.824332s | 0.475ms * 131072 = 62.2592s | 220s | 284.996s | 283.084s |
從上面的量化結果來看,由於擦除和寫入等待時間較長,相比較下單純數據傳輸時間在總量產時間 T3 裏佔比過小,所以 Single SPI 模式相比 QPI/OPI 模式的 Page Program 並無顯出多大劣勢。那麼低速 Single SPI 模式 Page Program 好處體如今哪呢?咱們知道影響 Flash 器件最大的因素是擦寫次數(壽命),低速 Single SPI 模式在數據傳輸上的抗干擾能力遠比高速 QPI/OPI 模式要強,對於 Flash 寫入而言,正確性纔是最重要的,低速一次寫成功比高速下由於發生傳輸錯誤而重複去擦寫更有利於延長 Flash 使用壽命。
至此,串行NOR Flash的頁編程模式對於量產效率的影響痞子衡便介紹完畢了,掌聲在哪裏~~~
文章會同時發佈到個人 博客園主頁、CSDN主頁、知乎主頁、微信公衆號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。