国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

飛凌i.MX8M Plus開發(fā)板的M核SPI主從模式通訊詳解

2023-04-07 16:02 作者:飛凌嵌入式  | 我要投稿

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

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


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

SPI主模式

1. SPI初始化

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

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

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

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

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

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

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

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

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

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

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

    • 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ù)據(jù),SPI從接收后,將數(shù)據(jù)回傳。SPI主接收回傳信息后,比對接收和發(fā)送的數(shù)據(jù)是否一致,輸出比對結(jié)果。如一致,本次傳輸結(jié)束,等待輸入任何按鍵啟動下一次傳輸。

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

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

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

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

      02SPI從模式

    1. SPI初始化

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

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

    2. SPI收發(fā)流程

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

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

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

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

    03A核修改

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


    1.?修改設(shè)備樹

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

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

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

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

      04程序驗證

      1.?硬件連接

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

      發(fā)板1--SPI主模式開發(fā)板2--SPI從模式管腳名稱開發(fā)板位置管腳名稱開發(fā)板位置MISOP40-10MISOP40-10MOSIP40-8MOSIP40-8SCKP40-1SCKP40-1SS0P40-3SS0P40-3GNDP40-4/P40-7GNDP40-4/P40-7

      2. M核程序

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

      放到/run/media/mmcblk2p1/目錄下。注意,SPI主模式程序須放入開發(fā)板1,SPI從模式程序須放入開發(fā)板2,詳細操作可看以前發(fā)布的文章?>>玩轉(zhuǎn)多核異構(gòu)】M核程序的啟動、編寫和仿真。

      3. 實際測試

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

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

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


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


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

      以上就是小編為小伙伴帶來的OKMX8MP-C開發(fā)板M核控制SPI主從模式的使用方法了,是不是感覺性能很強大呢?


      飛凌i.MX8M Plus開發(fā)板的M核SPI主從模式通訊詳解的評論 (共 條)

      分享到微博請遵守國家法律
      开化县| 张家港市| 湘潭市| 白河县| 游戏| 乌恰县| 商南县| 龙江县| 永昌县| 明星| 磴口县| 山阴县| 临澧县| 孝昌县| 林口县| 银川市| 江达县| 观塘区| 英吉沙县| 常山县| 客服| 岚皋县| 韶山市| 清新县| 渭源县| 高平市| 星座| 临湘市| 厦门市| 开化县| 曲水县| 东阳市| 增城市| 淮阳县| 共和县| 兰西县| 财经| 达尔| 黄山市| 溆浦县| 安塞县|