技術文章

當前頁面: 两码中特期期 >技術文章 >NXP iMX7 M4 核心 SPI Slave 測試

精准两码中特:NXP iMX7 M4 核心 SPI Slave 測試

供稿:韜睿(上海)計算機科技有限公司 2019/5/8 16:05:48

0 人氣:4

  • 關鍵詞: iMX7 FreeRTOS SPI
  • 摘要:本文就繼續演示基于iMX7 M4 SPI Slave Mode功能測試。

两码中特期期 www.nuoyp.icu

1). 簡介

在之前的兩篇文章中已經介紹過基于NXP iMX7 異構多核架構進行開發調試,以及iMX7M4核心PWM驅動開發。本文就繼續演示基于iMX7 M4 SPI Slave Mode功能測試。

本文所演示的ARM平臺同樣來自于Toradex 基于NXP iMX7 ARM處理器的Colibri iMX7 ARM嵌入式平臺。

2. 準備

a). ColibriiMX7S ARM核心版配合ColibriEvaluation Board,分別連接A7核心默認調試串口UART1(載板X27)和M4核心默認調試串口UART2(載板X25上)到開發主機方便調試,另外由于iMX7S只支持一個USB接口,需要通過載板X30連接一個USB Hub后來擴展鍵盤鼠標外設。更多關于Colibri iMX7的說明請參考DatasheetLinux開發上手指南。

b). 為了測試iMX7 M4 SPI Slave,相應的需要一個SPI Master設備,這里使用Toradex 基于NXP iMX6 ARM處理器的ApalisiMX6 嵌入式??榕浜?/span>ApalisEvaluation Board 作為SPI Master使用。連接默認調試串口UART1(載板X29)到開發主機方便調試。

c). Colibri iMX7 A7核心系統使用Toradex官方發布的EmbeddedLinux,更新方法請參考這里。

d). Apalis iMX6核心系統使用Toradex官方發布的EmbeddedLinux,更新方法請參考這里。

c). 由于本文演示示例使用到了SPI資源,Apalis iMX6 Colibri iMX7 默認的SPI資源可以參考這里, Apalis iMX6使用SPI1相應管腳,Colibri iMX6使用Colibri默認的SPI管腳,因此需要硬件連接如下:

Apalis Evaluation Board X8 MXM3_221 -> ColibriEvaluation Board X10 SODIMM_88

Apalis Evaluation Board X8 MXM3_223 -> ColibriEvaluation Board X10 SODIMM_90

Apalis Evaluation Board X8 MXM3_225 -> ColibriEvaluation Board X10 SODIMM_92

Apalis Evaluation Board X8 MXM3_227 -> ColibriEvaluation Board X10 SODIMM_86

3). Colibri iMX7 M4核心FreeRTOS基本資料

a). Colibri iMX7 架構基本說明請參考如下:

  https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7

b). 本示例中M4核心運行FreeRTOS v8系統,相關的源代碼和sample程序請從下面git下載:

//git.toradex.cn/cgit/freertos-toradex.git/

c). 基本的SDK配置和編譯請參考如下:

https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Linux_support

d). 編譯好的M4 firmware如何在Colibri iMX7上面加載運行請參考如下:

https://developer.toradex.cn/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Running_a_Firmware_on_CortexM4

e). 幾個自帶的sample代碼簡單說明請參考如下:

https://developer.toradex.com/knowledge-base/freertos-on-the-cortex-m4-of-a-colibri-imx7#Examples

4). Colibri iMX7 M4核心FreeRTOSSPI Slave Mode示例驅動開發

a). 在上一章節中提到的iMX7 M4 FreeRTOS源代碼中,已經包含SPI Interrupt/Polling兩種模式的Master Mode驅動示例,但沒有包含Slave Mode,因此這里我們需要自己創建,本文只演示基于Interrupt模式的Slave Mode驅動示例。

b). 首先先對pin_mux 定義進行修改,添加SPI slave的管腳初始化代碼

./ 文件為freertos-toradex/examples/imx7_colibri_m4/ 路徑下的pin_mux.hpin_mux.c 文件,patch參考如下:

https://github.com/simonqin09/iMX7_M4_SPI_Slave_Driver/blob/master/pin_mux.patch

c). 然后在FreeRTOS 源代碼目錄下“v8/freertos-toradex/examples/imx7_colibri_m4/driver_examples/ecspi/ecspi_interrupt/”創建 slave項目目錄,項目包含文件如下:

./ hardware_init.c 文件,硬件初始化配置,具體內容參考如下:

https://github.com/simonqin09/iMX7_M4_SPI_Slave_Driver/blob/master/hardware_init.c

./ armgcc目錄,用于編譯,幾乎和master項目下的armgcc文件是完全一樣的,唯一就是修改了CMakeLists.txt 文件中定義的ProjectName ecspi_interrupt_slave 以便于和 master 應用區分,具體文件內容可以參考如下:

https://github.com/simonqin09/iMX7_M4_SPI_Slave_Driver/tree/master/armgcc

./ main.c 文件,SPI interrupt slave的核心程序代碼,具體內容和一些簡單說明如下:

https://github.com/simonqin09/iMX7_M4_SPI_Slave_Driver/blob/master/main.c

// ECSPI_SlaveGetTransferStatus 函數用于標識傳輸完成

// ECSPI_SlaveConfig 函數用于初始化SPI slave模式的相關參數,使能相關中斷,初始化發送寄存器等

// BOARD_ECSPI_HANDLER 函數用于處理中斷,這里主要實現接收并保存收到的數據,同時向發送寄存器推送預存的數據

// main 函數為主函數,主要調用上面的初始化函數進行初始化,然后通過一個while循環將接收和發送的數據打印出來。

d). iMX7 M4 FreeRTOS代碼進行debug的方法請參考這里,本文就不再贅述。

5). Colibri iMX7 M4 SPI Slave驅動示例部署

a). 在部署之前,首先需要確保將本文所使用的SPI資源從 iMX7 A7 核心 Linux device treedisable,以免發生資源沖突。有兩種方法如下:

./ 參考這里下載A7 Linux kernel源代碼,再參考這里修改device tree后重新編譯部署。

./ 可以直接在uboot中通過”fdt_fixup” 環境變量來臨時禁止

-----------------------------

/* set fdt_fixup variable with UARTB and SPIdisable */

# setenvfdt_fixup ‘fdt_fixup=fdt addr ${fdt_addr_r} && fdt rm/soc/[email protected]/[email protected]/[email protected] && fdt rm /soc/[email protected]/[email protected]/[email protected]

-----------------------------

b). 對應的基于Apalis iMX6平臺的SPI Master 使用基于Linux kernel自帶的 spidev_test 應用來進行測試,部署如下:

./ linux kernel spidev_test 原始源代碼請參考這里,為了測試方便,本文應用做了如下修改:

https://github.com/simonqin09/iMX7_M4_SPI_Slave_Driver/blob/master/spidev_test.patch

./ 參考這里的說明對 spidev_test.c 進行編譯,生成 spidev_test 可執行程序,將程序復制到 Apalis iMX6??樽急負笮褂?。

c). 參考上面的相關文檔或者之前的文章將SPI slave測試驅動的M4 firmware “ecspi_interrupt_slave.elf” 通過iMX7 uboot進行加載運行,本文通過tftp進行加載測試

------------------------------------------

Colibri iMX7 # tftp ${loadaddr}ecspi_interrupt_slave.elf

Using FEC0 device

TFTP from server 10.20.1.116; our IPaddress is 10.20.1.10

Filename 'ecspi_interrupt_slave.elf'.

Load address: 0x80800000

Loading:##################################################  38.3 KiB

       4.2 MiB/s

done

Bytes transferred = 39262 (995e hex)

Colibri iMX7 # bootaux ${loadaddr}

## Starting auxiliary core at 0x1FFF80D1...

------------------------------------------

d). SPI masterslave 數據傳輸測試

./ 首先上面的M4 firmware加載運行成功后,M4 調試串口打印信息如下:

------------------------------------------

-------------- ECSPI slave driver example--------------

This example application demonstrates usageof SPI driver in slave mode.

It responses to remote processor in SPImaster mode.

SLAVE: Ready to transfer data with Master.

------------------------------------------

./ 然后在Apalis iMX6執行spidev_test程序,iMX6 調試串口打印信息如下:

------------------------------------------

[email protected]:~# ./spidev_test_new -H -v

spi mode: 0x1

bits per word: 8

max speed: 500000 Hz (500 KHz)

TX | 01 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FF __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

TX | 02 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FE __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 03 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FD __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 04 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FC __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 05 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FB __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 06 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | FA __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 07 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F9 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 08 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F8 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 09 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F7 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0A __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F6 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0B __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F5 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0C __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F4 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0D __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F3 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0E __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F2 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 0F __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F1 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

TX | 10 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | .

RX | F0 __ __ __ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  | ?

------------------------------------------

./ 此時 iMX7 M4 調試串口打印信息如下

------------------------------------------

SLAVE: Data transfer result:

Rx data: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E0x0F 0x10

Tx data: 0xFF 0xFE 0xFD 0xFC 0xFB 0xFA 0xF9 0xF8 0xF7 0xF6 0xF5 0xF4 0xF3 0xF20xF1 0xF0

------------------------------------------

./ 對比可以看到,M4 SPI slave 成功收到了 iMX6 SPI master發出的數據,同時也將預存的數據發送給了iMX6 SPI master,并且其也成功正確接收了。

7). 總結

本文簡單示例了基于iMX7 M4 SPI Slave模式的驅動供參考。

審核編輯(王靜)
更多內容請訪問 韜睿(上海)計算機科技有限公司(//c.gongkong.com/?cid=16879)

手機掃描二維碼分享本頁

工控網APP下載安裝

工控速派APP下載安裝

 

我來評價

評價:
一般