開源藍(lán)牙心率防水運(yùn)動(dòng)手環(huán) ——瘋殼·智能穿戴開發(fā)系列 外部 Flash 讀寫 1 SPI+簡介 本節(jié)中,我們將使用 DA14580 自帶的 SPI+來進(jìn)行對外部 Flash 的讀寫操作。 SPI(Serial Peripheral interface),串行外圍設(shè)備接口,是是 Motorola 首先在其 MC68HCXX 系列處理器上定義的。SPI 接口主要應(yīng)用在EEPROM、FLASH、實(shí)時(shí)時(shí)鐘、AD 轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。 該接口一般使用 4 條線:串行時(shí)鐘線(SCLK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線 MOSI 和低電平有效的從機(jī)選擇線 NSS。 我們 DA14580 的這個(gè) SPI+接口支持 SPI 總線的一個(gè)子集。這個(gè)串行接口在主/從模式可以發(fā)送和接受 8、16 或 32 位,并且在主模式可以發(fā)送 9 位。SPI+接口有雙向的 2*16 位字的 FIFO,功能得到了增強(qiáng)。 我們這個(gè)接口可以工作在主或從模式;有 8、9、16、32 位的操作方式;SPI 控制器的時(shí)鐘達(dá)到 16MHz,SPI 時(shí)鐘源可以通過編程進(jìn)行 1、2、4、8 分頻;SPI 的時(shí)鐘線達(dá)到 8MHz;支持 SPI 的 0、1、2、3 四種工作模式;SPI——DO 的空閑電平可以通過編程設(shè)置;可屏蔽的中斷發(fā)生器;單向讀和寫模式降低總線負(fù)載。 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 就是電源腳。 圖 1 3 軟件設(shè)計(jì) 要通過 SPI 進(jìn)行對外部 Flash 的讀寫操作,我們首先是進(jìn)行相關(guān)時(shí)鐘引腳的配置,也就是下面的函數(shù) periph_init()。 在 periph_init()中,我們完成了 SPI,uart2 的管腳配置,以及對串口 2 進(jìn)行初始化。 然后,我們要進(jìn)行的是對 SPI 接口的一個(gè)初始化。 void spi_init(SPI_Pad_t *cs_pad_param, SPI_Word_Mode_t bitmode, SPI_Role_t role, SPI_Polarity_Mode_t clk_pol, SPI_PHA_Mode_t pha_mode, SPI_MINT_Mode_t irq, SPI_XTAL_Freq_t freq) 第一個(gè)參數(shù) cs_pad_param 是分配給 SPI CS 信號(hào)的端口管腳,我們這里用的是 0.3 腳。 第二個(gè)參數(shù)bitmode 是 SPI 操作的位數(shù),有 8.9.16.32 位操作模式,我們這里用的 8 位,所以填寫 SPI_MODE_8BIT。 第三個(gè)參數(shù) role 是用來配置我們 SPI 的工作方式,我們這里用的是主 SPI,因此選擇 SPI_ROLE_MASTER。 第 四 個(gè) 參 數(shù) clk_pol 是 用 來 選 擇 SPI 時(shí) 鐘 空 閑 極 性 , 我 們 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步時(shí)鐘的空閑狀態(tài)為低電平。 參數(shù) pha_mode 是選擇 SPI 的采樣邊沿,我們這里選的是 SPI_PHA_MODE_0。 最后兩個(gè)參數(shù) irq 和 freq 分別是用來配置 SPI 中斷和時(shí)鐘分頻。我們選擇SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。 以上是我們對 SPI 的初始化設(shè)置,當(dāng)然,大家也可以根據(jù)自己的需求進(jìn)行配置。對 SPI 初始化設(shè)置完成之后,我們就可以開始讀寫外部 Flash 了,通過調(diào)用: int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size); int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。 4 實(shí)驗(yàn)現(xiàn)象 首先,插好 Jlink 和 USB 轉(zhuǎn)串口,然后打開打開串口調(diào)試助手。 (1)選擇串口號(hào),我們圖中是 COM1,這個(gè)根據(jù)實(shí)際情況選擇。 (2)配置串口參數(shù),波特率為 115200,數(shù)據(jù)位 8,停止位 1,沒有校驗(yàn)位和控制流,與下圖一致。 (3)點(diǎn)擊打開串口,4 是串口接收框。 圖 2 配置完串口之后,打開我們提供的代碼。 (1)點(diǎn)擊仿真按鍵。 圖 3 (2)點(diǎn)擊運(yùn)行代碼。 圖 4 完成之后,就能看到串口調(diào)試助手接收框信息如下。 圖 5 如需定制開發(fā),請通過官網(wǎng)“瘋殼”里的聯(lián)系方式聯(lián)系我們 配套資料:https://www.fengke.club/GeekMart/su_fkZyGYgrp.jsp 配套視頻:https://www.fengke.club/GeekMart/su_fTSgUL3y3.jsp 套件地址:http://shop115904315.taobao.com 文件下載請點(diǎn)擊: |