最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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主從模式通訊詳解的評論 (共 條)

      分享到微博請遵守國家法律
      合肥市| 青河县| 句容市| 手机| 阿克陶县| 深水埗区| 普格县| 沁阳市| 蓬莱市| 营口市| 专栏| 丰都县| 漳州市| 朝阳区| 贞丰县| 荣成市| 沽源县| 子洲县| 淅川县| 南宫市| 青川县| 牡丹江市| 共和县| 荔波县| 鹤岗市| 盐源县| 普安县| 修文县| 晋中市| 阳新县| 灵武市| 张家港市| 布拖县| 定兴县| 连城县| 纳雍县| 东城区| 天峻县| 五常市| 嵊州市| 青岛市|