SPI Flash数据移位
背景
C6678外掛了一片SPI接口的Nor Flash,型號(hào)為Micron N25Q128A13BSF404F,其容量為128Mbit,由于電平匹配問(wèn)題中間使用了一片EPLD作電平轉(zhuǎn)換,將6678的1.8V電平邏輯轉(zhuǎn)換為3.3V。
問(wèn)題描述
開發(fā)和調(diào)試很順利,在完成軟件概要設(shè)計(jì)后約一周內(nèi)就完成了所有編碼和部分測(cè)試工作。但是在測(cè)試過(guò)程中發(fā)現(xiàn)當(dāng)SPI的時(shí)鐘配高一些(50MHz)的時(shí)候,就會(huì)出現(xiàn)Flash初始化不通過(guò),具體現(xiàn)象是讀取ID不正確,與正確的ID總是移位1個(gè)比特。當(dāng)把SPI時(shí)鐘調(diào)低到20MHz后又恢復(fù)正常,而在30~40MHz左右時(shí)又總是一會(huì)兒正常一會(huì)兒錯(cuò)誤。
分析排查
這時(shí)先懷疑芯片不支持這么高時(shí)鐘速率,然而查手冊(cè)發(fā)現(xiàn)其中明確提到最高支持時(shí)鐘速率為108MHz。然后又詢問(wèn)硬件設(shè)計(jì)人員物料來(lái)源,得知通過(guò)正常途徑采購(gòu),芯片本身應(yīng)該沒有什么問(wèn)題。最后問(wèn)題應(yīng)該還是歸結(jié)到軟件問(wèn)題上。
先查SPI驅(qū)動(dòng)中對(duì)分頻的配置,仔細(xì)對(duì)比手冊(cè)沒有找到問(wèn)題。然后用示波器測(cè)量時(shí)鐘引腳頻率,仍然正常。測(cè)量讀ID時(shí)主機(jī)發(fā)送的命令信號(hào),依然正常。再測(cè)量不同頻率下6678的接收引腳信號(hào),在頻率逐漸提高過(guò)程中時(shí)鐘采樣沿居然逐漸接近了數(shù)據(jù)波形的邊沿處!最終40MHz時(shí)完全采在了前一個(gè)bit的后部,結(jié)果當(dāng)然會(huì)移位1個(gè)比特。
根據(jù)這個(gè)測(cè)量結(jié)果仔細(xì)分析,終于找到了其中的原因。原來(lái)是中間的EPLD在搗鬼,信號(hào)經(jīng)過(guò)它時(shí)除了電平轉(zhuǎn)換,還會(huì)有一定的時(shí)延效應(yīng),正是這個(gè)時(shí)延導(dǎo)致了數(shù)據(jù)錯(cuò)誤。詳細(xì)分析如下。
理論分析
SPI總線由SPICS、SPICLK、SPISIMO和SPISOMI組成,其中前三根由6678驅(qū)動(dòng),后一根由N25Q驅(qū)動(dòng)。假設(shè)信號(hào)經(jīng)過(guò)EPLD的時(shí)延是Δt,以6678輸出CS的時(shí)刻為基準(zhǔn),t時(shí)刻SPICLK信號(hào)開始有效。
當(dāng)Δt=0時(shí)正常時(shí)序如圖中的時(shí)序1所示,SPISIMO和SPISOMI在SPICLK的上升沿?cái)?shù)據(jù)有效,6678和N25Q均能采樣得到正確數(shù)據(jù)。
當(dāng)Δt>0時(shí)如圖中的時(shí)序2所示。由于SPICS、SPICLK、SPISIMO的時(shí)延相等相抵消,在SPICLK上升沿N25Q仍能采得正確數(shù)據(jù),即主機(jī)向從機(jī)發(fā)送數(shù)據(jù)不受影響。
此時(shí)從機(jī)剛剛收到時(shí)鐘信號(hào),因此觸發(fā)其發(fā)出SPISOMI的輸出也才剛剛開始,比正常時(shí)間順延Δt。此信號(hào)經(jīng)過(guò)EPLD再回到6678端時(shí)再次順延Δt,而6678端的其他三根信號(hào)無(wú)時(shí)延,兩者相差達(dá)到2Δt。若此時(shí)間大于半個(gè)時(shí)鐘周期,則采樣將產(chǎn)生不穩(wěn)定,甚至錯(cuò)位。實(shí)際信號(hào)并非陡峭邊沿,因此對(duì)Δt要求更高。
理論分析完畢,接下來(lái)要實(shí)測(cè)來(lái)證實(shí)理論。用示波器的兩個(gè)通道分別測(cè)量EPLD兩端的SPICLK信號(hào),結(jié)果兩通道上信號(hào)的時(shí)間差約4ns,雙向達(dá)到8ns,且信號(hào)邊沿形狀較差。因此SPI時(shí)鐘周期不應(yīng)低于16ns,即62.5MHz,實(shí)際測(cè)試時(shí)鐘頻率在35MHz時(shí)可以正確傳輸數(shù)據(jù),到達(dá)40MHz以上時(shí)傳輸失敗。證實(shí)了理論分析。
解決方案
最后在Flash驅(qū)動(dòng)中將時(shí)鐘頻率限制在25MHz以下,規(guī)避了這個(gè)問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的SPI Flash数据移位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WordPress获取当前TAG别名(s
- 下一篇: 唐骏:先做人再做事偶尔作作秀