一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【玩轉多核異構】i.MX8M Plus開發(fā)板的M核SPI主從模式通訊

飛凌嵌入式 ? 2023-04-07 17:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為了能夠讓更多工程師朋友了解多核異構處理器,飛凌嵌入式特別推出了【玩轉多核異構】專題,幫助大家解決在多核異構處理器的開發(fā)過程中遇到的問題。專題持續(xù)更新中,歡迎您的訂閱關注。

SPI(串行外圍設備接口)是一種低成本、易使用的接口協(xié)議,具備全雙工、高速、通訊簡單的特點,被廣泛應用于微控制器和外圍設備芯片之間的通訊。當SPI接口作為主模式時可以連接Flash存儲器、AD采樣芯片、實時時鐘RTC、LCD顯示屏、音頻芯片以及各種傳感器。

d1234a56-d4c9-11ed-ad0d-dac502259ad0.png

隨著產品功能的愈加豐富,多處理器使用SPI接口進行通訊的場景開始出現(xiàn),而多個SPI設備之間通信必須由主設備(Master)來控制從設備(Slave)。小編手上的OKMX8MP-C開發(fā)板基于NXPi.MX8MPlus多核異構處理器設計,它的M核有1路SPI,因而為實現(xiàn)SPI的相互通訊,我們就需要兩塊OKMX8MP-C開發(fā)板的SPI互作主從設備進行通信。本文小編就將從應用角度為大家講解M核SPI間通訊的實現(xiàn)方式。

d135e684-d4c9-11ed-ad0d-dac502259ad0.jpg

一、SPI主模式

1. SPI初始化

SPI初始化主要包括總線時鐘、管腳和相應寄存器的初始化。具體如下:

(1)SPI總線時鐘:現(xiàn)將SPI總線倍頻到800MHz,再10分頻到80MHz。

CLOCK_SetRootMux(kCLOCK_RootEcspi2,kCLOCK_EcspiRootmuxSysPll1);//SPI2總線時鐘使用PLL1-800MHz

(2)管腳配置:選擇SPI2的四個管腳。

IOMUXC_SetPinMux(IOMUXC_ECSPI2_MISO_ECSPI2_MISO, 0U); // SPI2-MISO IOMUXC_SetPinMux(IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI, 0U); // SPI2-MOSI IOMUXC_SetPinMux(IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK, 0U); // SPI2-SCLK IOMUXC_SetPinMux(IOMUXC_ECSPI2_SS0_ECSPI2_SS0, 0U); // SPI2-SSO

(3)SPI速率:設置速率為500K。

#define TRANSFER_BAUDRATE 500000U // 速率 500K

(4)數(shù)據長度選擇:8bit。

config->burstLength=8;//數(shù)據長度8bit

(5)四種模式選擇:CPOL和CPHA的四種組合即為SPI的四種模式。

config->clockInactiveState = kECSPI_ClockInactiveStateLow; // 時鐘SCL: 活動時低電平,空閑時高電平 config->dataLineInactiveState = kECSPI_DataLineInactiveStateLow;// 數(shù)據MOSI&MISO: 活動時低電平,空閑時高電平 config->chipSlectActiveState = kECSPI_ChipSelectActiveStateLow;// 片選SS: 低電平選中,高電平無效 config->polarity = kECSPI_PolarityActiveHigh; // 時鐘信號極性,即CPOL為0的話 SCLK高電平有效(空閑的時候為低電平),為1的話SCLK低電平有效(空閑的時候為高電平)。 config->phase = kECSPI_ClockPhaseFirstEdge; // 時鐘相位,即CPHA為0的話串行時鐘的第一個跳變沿(上升沿或下降沿)采集數(shù)據,為1的話串行時鐘的第二個跳變沿(上升沿或下降沿)采集數(shù)據。

(6)主模式選擇:設置SPI為主模式。

config->channelConfig.channelMode = kECSPI_Master; // 主模式

(7)通道選擇:一個SPI有四個硬件片選信號,每個片選信號是一個硬件通道,本程序選擇通道0。

config->channel = kECSPI_Channel0; // 通道0

(8)關閉自回環(huán):如果開啟了自回環(huán),那么SPI數(shù)據會在芯片內回環(huán),不會到外部管腳,在程序調試時可以排除外部端子的干擾,但真實應用時,需要關閉自回環(huán),從外部管腳收發(fā)數(shù)據。

Config->enableLoopBack = false; // 不回環(huán),使用外部管腳

2. SPI收發(fā)流程

我們分別將兩塊OKMX8MP-C開發(fā)板命名為開發(fā)板1和開發(fā)板2,并且將開發(fā)板1的SPI接口采用主模式,使能收發(fā)中斷;將開發(fā)板2的SPI接口采用從模式,使能收發(fā)中斷。

SPI主發(fā)送64字節(jié)數(shù)據,SPI從接收后,將數(shù)據回傳。SPI主接收回傳信息后,比對接收和發(fā)送的數(shù)據是否一致,輸出比對結果。如一致,本次傳輸結束,等待輸入任何按鍵啟動下一次傳輸。

(1)SPI發(fā)送數(shù)據:EXAMPLE_ECSPI_MASTER_BASEADDR 表示為SPI2,g_m_handle為SPI實例,包含了發(fā)送接收中斷及其回調函數(shù),masterXfer為要發(fā)送的64字節(jié)數(shù)據。

ECSPI_MasterTransferNonBlocking(EXAMPLE_ECSPI_MASTER_BASEADDR, &g_m_handle, &masterXfer); //主模式中斷方式發(fā)送數(shù)據

(2)SPI接收數(shù)據:SPI總線的發(fā)送和接收都是主模式控制的,因此接收函數(shù)的過程和發(fā)送是一致的。

(3)接收和發(fā)送數(shù)據對比:

for (i = 0U; i < TRANSFER_SIZE; i++) { if (masterTxData[i] != masterRxData[i]) { errorCount++; } }

二、SPI從模式

1. SPI初始化

SPI從模式初始化與主模式要保持一致,除了將工作模式設為從模式,其他設置均一樣。主從模式選擇:設置SPI為從模式。

config->channelConfig.channelMode = kECSPI_Slave; //從模式

2. SPI收發(fā)流程

開發(fā)板2的SPI接口采用從模式,使能收發(fā)中斷。

SPI從進入等待接收狀態(tài),在片選有效后,通過接收中斷獲取數(shù)據,并回傳信息,再次進入接收狀態(tài)。

(1)SPI接收數(shù)據:EXAMPLE_ECSPI_SLAVE_BASEADDR表示為SPI2,g_m_handle為SPI實例,包含了發(fā)送接收中斷及其回調函數(shù),slaveXfer存儲接收的數(shù)據。

ECSPI_SlaveTransferNonBlocking(EXAMPLE_ECSPI_SLAVE_BASEADDR, &g_s_handle, &slaveXfer); //從模式中斷方式接收數(shù)據

(2)SPI發(fā)送數(shù)據:SPI總線的發(fā)送和接收都是主模式控制的,因此接收函數(shù)的過程和發(fā)送是一致的。

三、A核修改

A核設備樹中若保留SPI2,內核解析設備樹,在/dev下生成設備文件spidev1.0。這樣待M核運行后,A核將重新對SPI2初始化,造成M核SPI功能異常,因此需要去除A核對SPI的控制。

1.修改設備樹

(1)在設備樹OK8MP-C.dts中,刪除SPI2設備節(jié)點相關信息。

&ecspi2 { #address-cells = <1>; #size-cells = <0>; fsl,spi-num-chipselects = <1>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>; cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>; status = "okay"; spidev1: spi@0 { reg = <0>; compatible = "rohm,dh2228fv"; spi-max-frequency = <500000>; }; }; pinctrl_ecspi2: ecspi2grp { fsl,pins = < MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x82 MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x82 MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x82 >; }; pinctrl_ecspi2_cs: ecspi2cs { fsl,pins = < MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x40000 >; };

(2)編譯生成新的內核鏡像Image及設備樹OK8MP-C.dtb。

(3)將生成的OK8MP-C.dtb和Image拷貝至開發(fā)板/run/media/mmcblk2p1/目錄下,輸入sync命令,重啟開發(fā)板。

(4)輸ls /dev查看發(fā)現(xiàn)沒有SPI2設備文件spidev1.0。

四、程序驗證

1.硬件連接

使用杜邦線將兩塊OKMX8MP-C開發(fā)板的SPI一一對應連接,線序如下:

開發(fā)板1--SPI主模式

開發(fā)板2--SPI從模式

管腳名稱

開發(fā)板位置

管腳名稱

開發(fā)板位置

MISO

P40-10

MISO

P40-10

MOSI

P40-8

MOSI

P40-8

SCK

P40-1

SCK

P40-1

SS0

P40-3

SS0

P40-3

GND

P40-4/P40-7

GND

P40-4/P40-7

2. M核程序

修改uboot環(huán)境變量設置M核自啟動,同時將M核程序forlinx_m7_tcm_firmware.bin

放到/run/media/mmcblk2p1/目錄下。注意,SPI主模式程序須放入開發(fā)板1,SPI從模式程序須放入開發(fā)板2。

3. 實際測試

(1)開發(fā)板2先上電,M核程序啟動,完成SPI初始化后,進入接收等待狀態(tài);

(2)開發(fā)板1后上電,M核程序啟動,完成SPI初始化后,主動發(fā)送64字節(jié)數(shù)據;

(3)開發(fā)板2SPI接收數(shù)據,通過串口打印接收的數(shù)據,并將接收的數(shù)據再次發(fā)送;

d158ebac-d4c9-11ed-ad0d-dac502259ad0.png

(4)開發(fā)板1的SPI接收到回傳信息,通過串口打印接收的數(shù)據。和發(fā)送數(shù)據比對,輸出結果。

d16b5df0-d4c9-11ed-ad0d-dac502259ad0.png

(5)此時在開發(fā)板1調試串口輸入任意鍵,即可開啟新一輪的SPI發(fā)送和接收流程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9349

    瀏覽量

    377372
  • NXP
    NXP
    +關注

    關注

    61

    文章

    1347

    瀏覽量

    189295
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1804

    瀏覽量

    95885
  • 多核異構
    +關注

    關注

    0

    文章

    20

    瀏覽量

    5534
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【飛凌嵌入式】基于i.MX9352開發(fā)板M的FreeRTOS設計例程

    i.MX 9352作為NXP 推出的新一代輕量級邊緣AI處理器,集成2個Cortex-A55和1個Cortex-M33實時,其架構設計充分體現(xiàn)了對實時性與復雜任務處理能力的兼顧。為
    的頭像 發(fā)表于 06-13 16:14 ?1337次閱讀
    【飛凌嵌入式】基于<b class='flag-5'>i.MX</b>9352<b class='flag-5'>開發(fā)板</b><b class='flag-5'>M</b><b class='flag-5'>核</b>的FreeRTOS設計例程

    NXP i.MX 91開發(fā)板#支持快速創(chuàng)建基于Linux?的邊緣器件

    NXP Semiconductors FRDM i.MX 91開發(fā)板設計用于評估i.MX 91應用處理器,支持快速創(chuàng)建基于Linux ^?^ 的邊緣器件。該開發(fā)板還設計用于入門級Lin
    的頭像 發(fā)表于 05-19 10:55 ?728次閱讀
    NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>開發(fā)板</b>#支持快速創(chuàng)建基于Linux?的邊緣器件

    米爾瑞芯微多核異構低功耗RK3506核心重磅發(fā)布

    近日,米爾電子發(fā)布MYC-YR3506核心開發(fā)板,基于國產新一代入門級工業(yè)處理器瑞芯微RK3506,這款芯片采用三Cortex-A7+單核Cortex-M0
    發(fā)表于 05-16 17:20

    米爾基于瑞芯微RK3506核心開發(fā)板

    MYC-YR3506核心開發(fā)板新一代入門級國產工業(yè)處理器RK3506,3A7+單核M0多核異構
    發(fā)表于 05-15 16:00 ?5次下載

    3A7+單核M0多核異構,米爾全新低功耗RK3506核心發(fā)布

    近日,米爾電子發(fā)布MYC-YR3506核心開發(fā)板,基于國產新一代入門級工業(yè)處理器瑞芯微RK3506,這款芯片采用三Cortex-A7+單核Cortex-M0
    的頭像 發(fā)表于 05-15 08:02 ?1302次閱讀
    3<b class='flag-5'>核</b>A7+單核<b class='flag-5'>M</b>0<b class='flag-5'>多核</b><b class='flag-5'>異構</b>,米爾全新低功耗RK3506核心<b class='flag-5'>板</b>發(fā)布

    i.MX93和i.MX8M Plus上都使用UART,遇到了RTS/CTS連接問題求解決

    我在 i.MX93和 i.MX8M Plus 上都使用 UART,并遇到了 RTS/CTS 連接問題。 在 i.MX93 上,以下接線工作正常: TX→ RX (RS232) RX←
    發(fā)表于 04-04 07:16

    請問在NXP的BSP QA過程中采用了哪些具體的測試方法?

    來更好地了解 QA 流程并在 RSB 3720 上實施它(NXP i.MX8M Plus Cortex-A53? 2.5 英寸 SBC)?
    發(fā)表于 03-17 08:04

    分享!基于NXP i.MX 8M Plus平臺的OpenAMP間通信方案

    i.MX 8M Plus平臺。 OpenAMP架構 AMP(Asymmetric Multi-Processing),即非對稱多處理架構。“非對稱AMP”雙系統(tǒng)是指多個核心相對獨立運行不同的操作系統(tǒng)或
    的頭像 發(fā)表于 02-27 10:44 ?506次閱讀
    分享!基于NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b>平臺的OpenAMP<b class='flag-5'>核</b>間通信方案

    NXP首款搭載MPU的FRDM產品怎么樣?FRDM i.MX93開發(fā)板開箱速覽

    近期,NXP將i.MX 93系列處理器引入了FRDM系列產品線,推出了FRDM i.MX 93開發(fā)板,作為首款配備i.MX MPU的FRDM
    的頭像 發(fā)表于 02-26 14:56 ?1158次閱讀
    NXP首款搭載MPU的FRDM產品怎么樣?FRDM <b class='flag-5'>i.MX</b>93<b class='flag-5'>開發(fā)板</b>開箱速覽

    恩智浦推出FRDM i.MX 93開發(fā)板

    備受嵌入式開發(fā)者青睞的恩智浦FRDM開發(fā)平臺,迎來了一位新成員——FRDM i.MX 93開發(fā)板,這也是第一塊配備i.MX MPU的FRDM
    的頭像 發(fā)表于 02-21 14:22 ?1467次閱讀

    i.MX8M Yocto工程更新第三方軟件包

    IAC-IMX8MP-Kit開發(fā)板為例,介紹如何升級已經配置好的Yocto工程第三方軟件包。首先,需要一個已經拉取并編譯好的Yocto工程,這個步驟可以參考NXP官方Yocto文檔,
    的頭像 發(fā)表于 02-12 08:11 ?600次閱讀
    <b class='flag-5'>i.MX8M</b> Yocto工程更新第三方軟件包

    【迅為電子】i.MX6UL和i.MX6ULL芯片區(qū)別與開發(fā)板對比

    【迅為電子】i.MX6UL和i.MX6ULL芯片區(qū)別與開發(fā)板對比
    的頭像 發(fā)表于 11-28 14:31 ?1328次閱讀
    【迅為電子】<b class='flag-5'>i.MX</b>6UL和<b class='flag-5'>i.MX</b>6ULL芯片區(qū)別與<b class='flag-5'>開發(fā)板</b>對比

    i.MX Linux開發(fā)實戰(zhàn)指南—基于野火i.MX系列開發(fā)板

    電子發(fā)燒友網站提供《i.MX Linux開發(fā)實戰(zhàn)指南—基于野火i.MX系列開發(fā)板.pdf》資料免費下載
    發(fā)表于 10-10 17:23 ?12次下載

    使用TPS65219為i.MX 8M Plus供電

    電子發(fā)燒友網站提供《使用TPS65219為i.MX 8M Plus供電.pdf》資料免費下載
    發(fā)表于 08-31 10:15 ?2次下載
    使用TPS65219為<b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b>供電

    i.MX 8M Plus中的ISP圖像信號處理模塊特性概述

    日常生活中,人類約80%的信息來自于視覺信息,而視覺信息的載體是數(shù)以億萬計的圖片和視頻流,因此如何打造高效而智能的視覺處理解決方案,是擺在開發(fā)者面前的重要課題。 恩智浦推出的i.MX 8M P
    的頭像 發(fā)表于 08-02 11:39 ?1828次閱讀