——瘋殼·機(jī)器人開(kāi)發(fā)系列 外部 Flash 讀寫
1SPI 簡(jiǎn)介
本章將使用 IAP15W4K61S4 單片機(jī)的 SPI 接口,對(duì)外部 Flash 進(jìn)行讀寫操作。
SPI 是一種全雙工、高速、同步的通信總線,有兩種操作模式:主模式和從模式。在主模式中支持高達(dá) 3Mbps 的速率(工作頻率為 12MHz 時(shí),如果 CPU 主頻率采用 20MHz 到 36MHz,就可以更高,從模式時(shí)速度無(wú)法太快),還具有傳輸完成標(biāo)志和寫沖突標(biāo)志保護(hù)。SPI 的功能框圖如下圖所示:
圖 1
SPI 接口其實(shí)是一個(gè) 8 位移位寄存器和數(shù)據(jù)緩沖器,數(shù)據(jù)可以同時(shí)發(fā)送和接收。在 SPI 數(shù)據(jù)的傳輸過(guò)程中,發(fā)送和接收的數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)緩沖器中。
對(duì)于主模式,如果要發(fā)送一個(gè)字節(jié)的數(shù)據(jù),只需要將這個(gè)數(shù)據(jù)寫到 SPDAT 寄存器中。主模式下/SS 信號(hào)不是必須的,但是在從模式下,必須在/SS 信號(hào)變?yōu)橛行Р⒔邮艿胶线m的時(shí)鐘信號(hào)后,方可進(jìn)行數(shù)據(jù)傳輸。在從模式下,如果一個(gè)字節(jié)傳輸完成后,/SS 信號(hào)變?yōu)楦唠娖,這個(gè)字節(jié)立即被硬件邏輯標(biāo)志為接收完成, SPI 接口準(zhǔn)備接收下一個(gè)數(shù)據(jù)。
2硬件設(shè)計(jì)
本次我們所使用的外部 Flash 是 W25X20CL,它一共有 8 個(gè)引腳。1 號(hào)引腳 CS 用于芯片的選擇。2 號(hào)引腳 DO 是數(shù)據(jù)輸出引腳。3 號(hào)引腳 WP 是寫保護(hù)。4 號(hào)是GND。5 號(hào) DIO 引腳既可以作為數(shù)據(jù)輸入,也可以作為數(shù)據(jù)輸出。6 腳 CLK 是 Flash 的串行時(shí)鐘信號(hào)。第 7 腳用于暫停 SPI 的通信。最后 VCC 就是電源腳。具體的硬件連接如下圖所示。
圖 2
3軟件設(shè)計(jì)
本次軟件設(shè)計(jì)主要是講解 SPI 讀寫外部 Flash,在此之前,先簡(jiǎn)要介紹 3 個(gè)與
SPI 相關(guān)的主要寄存器,其它相關(guān)寄存器可以參考官方數(shù)據(jù)手冊(cè)中的相關(guān)章節(jié)。
(1)SPI 控制寄存器 SPCTL
圖 3
SSIG:SS 引腳忽略控制位。
SSIG=1,MSTR(位 4)確定器件為主機(jī)還是從機(jī)。SSIG=0,SS 腳用于確定器件為主機(jī)還是從機(jī)。
SPEN:SPI 使能位。
SPEN=1,SPI 使能。
SPEN=0,SPI 被禁止,所有 SPI 引腳都作為 I/O 使用。
DORD:設(shè)定 SPI 數(shù)據(jù)發(fā)送和接收的位順序。DORD=1,數(shù)據(jù)字的最低位最先發(fā)送。DORD=0,數(shù)據(jù)字的最高位最先發(fā)送。
MSTR:主/從模式選擇位。CPOL:SPI 時(shí)鐘極性。
CPOL=1,SCLK 空閑時(shí)為高電平。SCLK 的前時(shí)鐘沿為下降沿而后沿為上升沿。
CPOL=0,SCLK 空閑時(shí)為低電平。SCLK 的前時(shí)鐘沿為上升沿而后沿為下降沿。
CPHA:SPI 時(shí)鐘相位選擇。
CPHA=1,數(shù)據(jù)在 SCLK 的前時(shí)鐘沿驅(qū)動(dòng),并在后時(shí)鐘沿采樣。
CPHA=0,數(shù)據(jù)在/SS 為低時(shí)被驅(qū)動(dòng),在 SCLK 的后時(shí)鐘沿被改變,并在前時(shí)鐘沿被采樣。
SPR1、SPR0:SPI 時(shí)鐘頻率選擇控制位。如下圖所示:
圖 4
(2)SPI 狀態(tài)寄存器 SPSTAT
圖 5
SPIF:SPI 傳輸完成標(biāo)志
當(dāng)一次串行輸出完成時(shí),SPIF 置位。此時(shí),如果 SPI 中斷被打開(kāi),則產(chǎn)生中斷。當(dāng) SPI 處于主模式且 SSIG=0 時(shí),如果/SS 為輸入并被驅(qū)動(dòng)為低電平,SPIF 也將置位,表示“模式改變”。SPIF 標(biāo)志通過(guò)軟件向其寫入“1”清零。WCOL:SPI 寫沖突標(biāo)志。
在數(shù)據(jù)傳輸?shù)倪^(guò)程中如果對(duì) SPI 數(shù)據(jù)寄存器 SPDAT 執(zhí)行寫操作,WCOL 將置位。WCOL 標(biāo)志通過(guò)軟件向其寫入“1”清零。
(3)控制 SPI 功能切換的寄存器 AUXR1(P_SW1)
圖 6
圖 7
DSP:SPTR 寄存器選擇位。
0,使用缺省數(shù)據(jù)指針 DPTR0。
1,使用另一個(gè)數(shù)據(jù)指針 DPTR1。首先看一下 SPI 初始化函數(shù)。
代碼1
SPI 初始化函數(shù),其實(shí)就是配置 SPI 相關(guān)寄存器的幾個(gè)位。當(dāng)然,大家也可以按照自己的實(shí)際需求進(jìn)行配置。
完成 SPI 初始化之后,就可以使用 SPI 發(fā)送接收函數(shù)。
代碼2
在 SPI_SendByte(u8 SPI_SendData)函數(shù)中,首先是將要發(fā)送的數(shù)據(jù)放入 SPI 數(shù)據(jù)寄存器SPDAT 中,然后判定 SPI 狀態(tài)寄存器 SPTAT 中的 SPIF 位。等待數(shù)據(jù)寫入完成之后,清除中斷標(biāo)志和寫沖突標(biāo)志。由于 SPI 為雙工通訊,最后就能返回得到的數(shù)據(jù)。
關(guān) 于 外 部 Flash W25X20CL 的 使 用 , 其 實(shí) 就 是 通 過(guò) SPI_SendByte(u8 SPI_SendData)寫指令、寫地址、寫數(shù)據(jù)。外部 Flash 的使用方法詳情可以讀數(shù)據(jù)手冊(cè)。
另外,本次實(shí)驗(yàn)還用到了串口,串口的使用方法可以閱讀前面的章節(jié):串口控制舵機(jī)原理。
4 實(shí)驗(yàn)現(xiàn)象
首先打開(kāi)下載軟件 STC-ISP。
圖 8
(1)點(diǎn)擊 Keil 仿真設(shè)置,添加 STC 相關(guān)的頭文件。STC 的相關(guān)頭文件路徑是我們之前安裝 Keil C51 的路徑,如果之前采用的默認(rèn)路徑,那么選擇 C 盤 Keil 文件夾。
圖 9
(2)添加完 STC 相關(guān)的頭文件,點(diǎn)擊彈窗中的確定。
圖 10
(3)設(shè)置單片機(jī)的型號(hào)、最低波特率、最高波特率如下圖所示,硬件選項(xiàng)等選項(xiàng)默認(rèn)即可。串口號(hào)根據(jù)實(shí)際情況選擇。
圖 11
(4)點(diǎn)擊打開(kāi)程序文件,選擇我們例程中的.hex 文件。
圖 12
(5)點(diǎn)擊下載/編程,下載代碼。
圖 13
(6)按一下電路板上面的 RST 按鍵,完成下載。
圖 14
代碼下載完成之后,打開(kāi)串口調(diào)試助手,如下圖所示。
(1)選擇串口號(hào),我們圖中是 COM1,這個(gè)根據(jù)實(shí)際情況選擇。
(2)配置串口參數(shù),波特率為 115200,數(shù)據(jù)位 8,停止位 1,沒(méi)有校驗(yàn)位和控制流,與下圖一致。
(3)點(diǎn)擊打開(kāi)串口。
圖 15
完成上述操作,運(yùn)行代碼之后,就會(huì)看到串口調(diào)試助手區(qū)域 4 中會(huì)顯示出讀寫 Flash 的數(shù)據(jù)信息。
圖 16
更多完整學(xué)習(xí)資料和對(duì)應(yīng)開(kāi)源套件,請(qǐng)登陸官網(wǎng):“瘋殼”
文件下載請(qǐng)點(diǎn)擊:
6_外部Flash的讀寫.pdf
(1.35 MB)
2022-7-20 16:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 積分 -1
|