去年調(diào)一塊帶 NAND Flash 的板子,系統(tǒng)啟動到一半就掛,查了兩天發(fā)現(xiàn)是控制器和顆粒之間的時序沒對上。這種問題在存儲器接口電路里太常見了——選型時只看引腳兼容,沒仔細(xì)查控制器的內(nèi)部延遲參數(shù)。最近又有人在問 JFM38U1B-B313-4F,這顆料公開資料不多,我按自己的經(jīng)驗(yàn)整理一下思路。
老實(shí)說,這顆芯片的官方 datasheet 我沒拿到完整版本,所以下面說的主要是基于同類 NAND 控制器的通用知識點(diǎn),具體參數(shù)一定得以最新規(guī)格書為準(zhǔn)。這類器件在嵌入式存儲里扮演的角色挺關(guān)鍵,它負(fù)責(zé)把 CPU 的通用總線協(xié)議翻譯成 NAND Flash 需要的命令/地址/數(shù)據(jù)復(fù)用時序,還要管糾錯和壞塊映射。
從電源上電順序說起——一個容易忽略的坑
這類 NAND 控制器通常兩路供電:核心邏輯 1.8V,I/O 接口 3.3V。手冊上沒明說但實(shí)際項(xiàng)目里很關(guān)鍵的一點(diǎn)是上電順序——1.8V 必須比 3.3V 先建立穩(wěn)定。為什么呢?因?yàn)楹诵挠蛳壬想?,?nèi)部 PLL 和狀態(tài)機(jī)初始化完成后,I/O 域再上電時引腳狀態(tài)才可控。反過來做的話,I/O 引腳可能在核心邏輯還沒配置好時就亂跳,造成 Flash 顆粒誤操作。
踩過的坑里遇到過一種情況:電源芯片用的是雙路 LDO,兩路同時 enable,結(jié)果 3.3V 負(fù)載輕升得快,先達(dá)到閾值,控制器 I/O 域比核心邏輯早幾百微秒啟動,F(xiàn)lash 就認(rèn)不出命令了。解決辦法是給核心供電加個 RC 延遲或者用帶時序控制的電源管理 IC。下電順序反過來,3.3V 先掉,1.8V 后掉。
實(shí)測下來,用示波器抓兩個電源軌的上升沿,延時至少要保證 100μs 以上才穩(wěn)妥。如果你在系統(tǒng)里集成這類控制器,建議板上預(yù)留一個電源監(jiān)控復(fù)位芯片的位置,萬一順序翻車還能補(bǔ)救。
接口信號——引腳定義里要注意的細(xì)節(jié)
對于 JFM38U1B-B313-4F 這種 BGA 封裝的器件,引腳分布決定了 PCB 布線的難度。常規(guī) NAND 控制器的信號組包括:
- 數(shù)據(jù)總線 DQ[7:0] 或 DQ[15:0],取決于是否支持寬位
- 控制信號 CLE(命令鎖存使能)、ALE(地址鎖存使能)、CE#(片選)、RE#(讀使能)、WE#(寫使能)
- 狀態(tài)信號 R/B#(就緒/忙),這個腳一般開漏輸出,要上拉
芯片內(nèi)部的 NAND 控制器一般會集成 ECC 引擎,常見的是 BCH 或 LDPC 糾錯算法。這個參數(shù)得特別注意——不同控制器支持的糾錯能力差別很大,從每 512 字節(jié)糾 4 位到 60 位都有。如果選的是 MLC 或 TLC NAND,它們的原始誤碼率本來就高,ECC 不夠強(qiáng)的話,數(shù)據(jù)壽命會大打折扣。
參數(shù)表(品類通用參考)
| 參數(shù)名 | 數(shù)值 | 工程意義說明 |
|---|---|---|
| 類型 | NAND Flash 控制器/接口橋接 | 把主機(jī)總線協(xié)議轉(zhuǎn)換為 NAND 專用協(xié)議,管理存儲介質(zhì) |
| 支持 NAND 類型 | SLC / MLC / TLC | 不同類型誤碼率和壽命差異大,影響系統(tǒng)可靠性設(shè)計(jì) |
| 接口標(biāo)準(zhǔn) | ONFI 3.0 / Toggle 2.0 兼容 | 決定了可與哪些 NAND 顆粒搭配,速度等級上限 |
| 封裝形式 | BGA | 焊接良率受 PCB 焊盤設(shè)計(jì)和回流焊曲線影響大 |
| 工作溫度范圍 | -40°C ~ +85°C(工業(yè)級推測) | 汽車級需更高溫度,注意工業(yè)級在嚴(yán)苛環(huán)境下的降級表現(xiàn) |
| 供電電壓 | 核心 1.8V / I/O 3.3V | 上電時序和去耦電容布局直接影響第一次啟動成功率 |
| ECC 糾錯能力 | 取決于具體型號(待 datasheet 確認(rèn)) | 針對 MLC/TLC 需要強(qiáng) ECC(如 BCH 60bit/1KB) |
關(guān)鍵參數(shù)解讀:接口速度與 ECC
上面表格里有兩個參數(shù)對性能影響最大。一個是接口標(biāo)準(zhǔn),ONFI 3.0 和 Toggle 2.0 都把單通道速度推到了 200MT/s 以上,但前提是 PCB 走線阻抗控制和過孔數(shù)量要到位。布線經(jīng)驗(yàn)不足的話,實(shí)際跑 133MT/s 可能就開始丟數(shù)據(jù)了。
另一個是 ECC 能力,這也是不同控制器拉開差距的地方。對于 SLC NAND,8 位 ECC 差不多夠用;但如果你要用 MLC(比如某些工控板上為了容量),ECC 至少要支撐到 24 位 BCH 糾錯。TLC 就更夸張了,現(xiàn)在的方案都上 LDPC 硬解碼加軟解碼了。JFM38U1B-B313-4F 的 ECC 能力具體多少,只能靠 datasheet 確認(rèn),按品類的常規(guī)水平猜測應(yīng)該不會低于 16 位 ECC。
什么場景下選這顆料,什么場景別碰
說點(diǎn)實(shí)話吧。這類 NAND 控制器芯片最大的優(yōu)勢就是封裝了協(xié)議轉(zhuǎn)換和糾錯功能,讓主控 CPU 不用親自管那些繁瑣的 NAND 操作。如果你做的產(chǎn)品是工業(yè)路由器、醫(yī)療儀器、機(jī)頂盒這類需要非易失存儲但又不一定用 eMMC 的場合,用控制器加裸 NAND 的方案成本上會比買 eMMC 模塊低 15%-20%,靈活性也更好。
但我個人不會在以下場景用它:需要高吞吐量寫入的場合——比如連續(xù)寫入 100MB/s 以上,控制器的內(nèi)部緩存是個瓶頸,而且壞塊管理做不好會導(dǎo)致寫入延遲抖動很大。另外,如果團(tuán)隊(duì)里沒有專職的存儲協(xié)議工程師,我建議還是老老實(shí)實(shí)用 eMMC 或者 SD 卡,把壞塊管理和磨損均衡交給封裝好的模塊,省的半夜被叫起來調(diào) NAND 時序。
總的來說,JFM38U1B-B313-4F 是否合適,關(guān)鍵看你對存儲可靠性的控制能力。如果只是存日志或者配置文件,很少有頻繁寫入,那問題不大。如果是要做文件系統(tǒng)的日志記錄,建議給控制器配個獨(dú)立的小容量 SLC NAND 放元數(shù)據(jù),把大塊數(shù)據(jù)放另一片 Flash 上,這樣系統(tǒng)在異常掉電后恢復(fù)起來快很多。