<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機與串行閃存的SPI接口設計

PIC單片機與串行閃存的SPI接口設計

作者: 時(shí)間:2010-05-27 來(lái)源:網(wǎng)絡(luò ) 收藏


3 硬件

16F877A具有非常完善的(RC3/SCK、RC4/SDI、RC5/SDO、RA5/SS),只有16F877A作為從機時(shí),RA5/SS引腳才作為腳,16F877A為主機時(shí),SS可作為普通I/O使用。通過(guò)該,可比較容易地實(shí)現PIC16F877A與SPI Flash的通信。PIC16F877A與M25P16的硬件如圖2所示。其中,SCK、SDI、SDO為MCU的SPI專(zhuān)用引腳,分別與存儲器的對應引腳相連,可選MCU的任意I/O腳作為存儲器的片選信號,圖中選取RC2腳與存儲器的片選S相連,這樣,在SPI通信時(shí)只涉及MCU的C口,便于操作。M25P16的HOLD和W直接接高電平,表示不允許在S有效的情況下暫停SPI通信且整個(gè)存儲區都沒(méi)有寫(xiě)保護。

圖2中,VDD為+5 V,由于PIC16F877A工作在5 V電壓下,而M25P16的工作電壓范圍為2.7~3.6 V,二者不能直接相連。這里采用電阻分壓的方式,保證輸入M25P16的S、C、D腳的電壓在存儲器能承受且能識別的范圍內,通過(guò)在M25P16向PIC16F877A輸入數據的SDO腳加上拉電阻,保證MCU可以識別M25P16輸出的高電壓,從而保證正常的SPI通信。如果MCU工作于3.3 V,則直接將二者的對應引腳相連即可。



4 SPI軟件

在硬件連線(xiàn)正確的基礎上,要進(jìn)行SPI通信,還要對M25P16編寫(xiě)驅動(dòng)程序,包括SPI初始化、讀M25P16的數據、向M25P16寫(xiě)人數據、數據的擦除等,這里使用C語(yǔ)言編程,編譯器選擇PICC,開(kāi)發(fā)環(huán)境為MPLAB IDE8.10。

PIC16F877A的SPI通信涉及4個(gè)寄存器:控制寄存器SSPCON、狀態(tài)寄存器SSPSTAT接收/發(fā)送緩沖器SSPBUF和移位寄存器SSPSR。其中,SSPCON的8位都是可讀可寫(xiě)的,用于設置SSP處于主/從模式、時(shí)鐘頻率、時(shí)鐘極性、SSP使能以及寫(xiě)沖突檢測;SSPSTAT只有高2位可讀寫(xiě),低6位是只讀的。PIC16F877A處于接收模式時(shí),SSPSR和SSPBUF構成2級緩沖的接收器,SSPSR每收到1個(gè)完整的字節,就將該字節傳給SSPBUF,并將中斷標志位SSPIF置1,可通過(guò)讀SSPBUF得到數據;877A處于發(fā)送模式時(shí),寫(xiě)SSPBUF操作會(huì )同時(shí)將數據寫(xiě)入SSPSR,觸發(fā)傳輸。下面結合具體的代碼進(jìn)行詳細闡述。

(1)SPI初始化與讀寫(xiě)函數


從SendByte和RcvByte函數的代碼中,可以看出數據發(fā)送和接收是否完成,都是通過(guò)判斷STAT_BF標志位(SSPSTAT寄存器的BF位,STAT_BF是在頭文件pic1687x.h中定義的名稱(chēng))來(lái)實(shí)現的,而數據手冊中關(guān)于BF位的描述僅用于接收模式。這是由于PIC16F877A通過(guò)SDO發(fā)送數據的同時(shí),會(huì )通過(guò)SDI讀人數據,當1字節發(fā)送完成時(shí),剛好接收1字節到SSPBUF,這時(shí)SSPBUF滿(mǎn),BY被置為1,故可通過(guò)STAT_BF標志判斷1字節是否發(fā)送完成。

(2)連續寫(xiě)函數

M25P16的PP指令允許1次連續寫(xiě)入不超過(guò)1頁(yè)(256字節)的數據。寫(xiě)人數據之前,首先要發(fā)出寫(xiě)允許命令,然后才能執行數據寫(xiě)入操作。數據寫(xiě)入函數參數包括address(32位地址)、block(寫(xiě)入數據緩沖區指針)、n(一次連續寫(xiě)入的字節數,n256)。如果address的低8位不全為0,即不是從頁(yè)起始處寫(xiě),并且需要寫(xiě)入的數據超出該頁(yè)剩余空間,則超出部分被丟棄。代碼如下:


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>