<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          SPI總線初體驗

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          SPI是當前用的比較多的硬件總線,結(jié)構(gòu)很簡單,一共只要4根線就可以了。 其中兩根是數(shù)據(jù)線,名字等會說,一根時鐘線,叫SCK; 一根是片選線(CS)。4根線的連接見下面:



          SPI的典型應(yīng)用中,通信的雙方一個是主(Master),一個是從(slave)。區(qū)別是由主設(shè)備提供通信時鐘信號SCK給從設(shè)備,此外主設(shè)備還需要提供一個引腳來驅(qū)動Slave的片選信號CS。主從設(shè)備的SO和SI是交叉連接的, 主的SO是數(shù)據(jù)輸出口要接在從設(shè)備的SI上,反之依然。根據(jù)這樣的設(shè)計,能做SPI的設(shè)備往往是單片機, ARM芯片或者更強一些的CPU什么,而flash, 網(wǎng)絡(luò)芯片或者聲音A/D 和D/A轉(zhuǎn)換芯片就扮演從設(shè)備的角色。主設(shè)備提供片選信號來選中從設(shè)備和連續(xù)時鐘信號來驅(qū)動雙方設(shè)備的讀寫過程。

          由于從設(shè)備往往都是廠家設(shè)計好的, 主要的用戶工作是如何在主設(shè)備上把從設(shè)備驅(qū)動起來。這是把我搞的灰頭土臉的地方。以我要驅(qū)動Flash為例,根據(jù)看的文檔,我直覺上知道應(yīng)該把片選信號先拉低(選中flash),然后在SO上發(fā)出控制指令,最后等數(shù)據(jù)到來。結(jié)果我的程序是這樣寫的:
          1、初始化SPI控制器,包括波特率設(shè)置
          2、驅(qū)動CS為低電平選中flash
          3、發(fā)送控制命令
          4、接受數(shù)據(jù)

          結(jié)果我收到的數(shù)據(jù)只有一個字節(jié),內(nèi)容為0. 忙了一個早上還是這個結(jié)果,搞的我極其郁悶,嚴重懷疑自己的RP,然后開始懷疑單片機是不是壞的,flash是不是壞的。一圈下來繼續(xù)懷疑RP。最后實在郁悶,就扛來示波器測波形。因為這個玩也不熟悉,因此不敢輕易動,弄壞了把自己賣了才賠的起了(10G的哦)。結(jié)果發(fā)現(xiàn)430單片機的片選CS信號正常,在數(shù)據(jù)發(fā)送的時候SO口的確有波形輸出,說明輸出是對的。但是。。。。為什么SCK沒有連續(xù)時鐘信號輸出 ???? 我立刻理直氣壯認為 單片機燒了,告訴師兄, 結(jié)果師兄暴汗.... :SPI主設(shè)備如果不連續(xù)輸出數(shù)據(jù),就不維護時鐘了。頓時覺得自己長的好白阿。 正確的做法應(yīng)該在主設(shè)備上送完指令后不停的送無用數(shù)據(jù)讓spi控制器繼續(xù)輸出時鐘并且讀取發(fā)回來的數(shù)據(jù)。由于SPI控制器是同步讀取數(shù)據(jù)的,因此我在發(fā)送的同時也讀取數(shù)據(jù),因此我送出去一個字節(jié)的數(shù)據(jù),所以讀回來一個數(shù)據(jù),當然這個數(shù)據(jù)是無用的。

          知道問題了,午飯后我把程序改成中斷模式的, 所有的數(shù)據(jù)發(fā)送和接受全部采用中斷。 發(fā)送寄存器一空 430就會發(fā)一個發(fā)送就緒中斷,我在中斷程序中把數(shù)組中的命令字發(fā)出去,等發(fā)完之后就一直發(fā)0x00,維護時鐘,直到發(fā)送出去的字節(jié)數(shù)等于期望收到的數(shù)據(jù)量。另外一方面當數(shù)據(jù)收到后430就觸發(fā)接收中斷得到數(shù)據(jù)。中斷程序把數(shù)據(jù)讀出來扔到接收數(shù)組里面。 等發(fā)送完后要檢查是不是移位寄存器為空,防止還有數(shù)據(jù)沒出去,等空了就拉高片選信號斷開flash. 完成這些后,檢查接收數(shù)組,可以看到如果發(fā)送命令為n字節(jié),則前面n字節(jié)的數(shù)據(jù)都是廢的,所以要從n+1的位置來找收到的數(shù)據(jù)。圓滿大結(jié)局。(其實后面還碰到了波特率不對,結(jié)果丟數(shù)據(jù)的問題,但是很快解決了加上現(xiàn)在寫的手酸,就略過拉)


          關(guān)鍵詞: SPI總線硬件總

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();