日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

一、SPI主模式

1. SPI初始化

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

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

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

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

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速率:設(shè)置速率為500K。

#define TRANSFER_BAUDRATE 500000U // 速率 500K

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

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

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

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

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

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

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

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

(8)關(guān)閉自回環(huán):如果開啟了自回環(huán),那么SPI數(shù)據(jù)會(huì)在芯片內(nèi)回環(huán),不會(huì)到外部管腳,在程序調(diào)試時(shí)可以排除外部端子的干擾,但真實(shí)應(yīng)用時(shí),需要關(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主接收回傳信息后,比對(duì)接收和發(fā)送的數(shù)據(jù)是否一致,輸出比對(duì)結(jié)果。如一致,本次傳輸結(jié)束,等待輸入任何按鍵啟動(dòng)下一次傳輸。

(1)SPI發(fā)送數(shù)據(jù):EXAMPLE_ECSPI_MASTER_BASEADDR 表示為SPI2,g_m_handle為SPI實(shí)例,包含了發(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ù)對(duì)比:

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

二、SPI從模式

1. SPI初始化

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

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

2. SPI收發(fā)流程

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

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

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

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

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

三、A核修改

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

1.修改設(shè)備樹

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

&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)編譯生成新的內(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。

四、程序驗(yàn)證

1.硬件連接

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

開發(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)境變量設(shè)置M核自啟動(dòng),同時(shí)將M核程序forlinx_m7_tcm_firmware.bin

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

3. 實(shí)際測(cè)試

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

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

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

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

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

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

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

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

    關(guān)注

    135

    文章

    9589

    瀏覽量

    393784
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    61

    文章

    1411

    瀏覽量

    199455
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1900

    瀏覽量

    102193
  • 多核異構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問如何使用Flexbuild 將 Debian 鏡像刷新到 i.MX8M Plus EVK 上的 eMMC?

    我正在使用 i.MX8M Plus EVK,并使用 NXP 的 Flexbuild 系統(tǒng)生成 Debian 映像。 到目前為止,我可以使用 flex-installer 構(gòu)建、自定義映像并將其刷新
    發(fā)表于 04-24 07:33

    如何通過 FPGA 的 QSPI 接口對(duì) MIMX8ML8CVNKZAB 進(jìn)行 DMA 訪問?

    We are planning access I.MX8M plus (MASTER) DMA over QSPI interface with FPGA as a Slave. 我們無法找到足夠
    發(fā)表于 04-23 07:33

    將 Linux BSP 用于 i.MX8M Plusi.MX8 Quad Max 平臺(tái),遇到的幾個(gè)問題求解

    我計(jì)劃將 Linux BSP 用于 i.MX8M Plusi.MX8 Quad Max 平臺(tái)。我有幾個(gè)問題: - 對(duì)于 Linux BSP,它是否支持 1 Gbps 以太網(wǎng)并允許將視頻流傳
    發(fā)表于 04-20 10:25

    無法將 FlexCan 與 i.MX 8M Plus EVK 一起使用,為什么?

    我正在使用\" i.MX 8M Plus EVK ”, and i have flashed on it the latest andro
    發(fā)表于 04-17 06:54

    如何下載 i.MX 8M Plus SDK?

    我正在使用 i.MX 8M Plus 處理器,并想下載適用于 Cortex-A53 的適當(dāng) SDK。我在產(chǎn)品頁面上找不到直接下載鏈接。 您能否引導(dǎo)我到正確的位置或提供下載 i.MX
    發(fā)表于 04-16 07:46

    基于運(yùn)行 Yocto Kirkstone 的 i.MX8M Mini 平臺(tái)上遇到以太網(wǎng)配置問題求解

    我在基于運(yùn)行 Yocto Kirkstone 的 i.MX8M Mini 平臺(tái)上遇到以太網(wǎng)配置問題。該在RMII模式下使用LAN8720A PHY。 具體問題是,將鏈路速度從 100 Mbps
    發(fā)表于 04-10 12:35

    如何在“i.MX 8M Plus EVK Board”上的網(wǎng)絡(luò)瀏覽器中打開.html文件?

    i am using “i.MX 8M Plus EVK ”,我已經(jīng)閃過了“l(fā)f_v6.12.34-2.1.0_images_imx
    發(fā)表于 04-10 08:56

    請(qǐng)問qemu 可以模擬 i.MX 8M Plus 嗎?

    我們沒有i.MX 8M Plus,所以我想問一下 qemu 是否可以模擬i.MX 8M
    發(fā)表于 03-05 08:10

    探索FRDM - IMX8MPLUS開發(fā)板:開啟嵌入式開發(fā)新旅程

    MPLUS開發(fā)板就是這樣一款值得深入探索的產(chǎn)品。它為開發(fā)者提供了一個(gè)低成本、高性能的硬件平臺(tái),能夠幫助我們快速熟悉i.MX 8M Plus應(yīng)
    的頭像 發(fā)表于 12-24 11:00 ?535次閱讀

    既要穩(wěn)定性,還要性價(jià)比的工業(yè)級(jí)開發(fā)板 — 米爾i.MX91

    之前我介紹過NXPi.MX8系列的開發(fā)板,最近它的下一代產(chǎn)品i.MX9系列產(chǎn)品也有了,我就拿到了這個(gè)基于NXPi.MX9系列的米爾MYD-LMX91
    的頭像 發(fā)表于 11-20 08:05 ?2766次閱讀
    既要穩(wěn)定性,還要性價(jià)比的工業(yè)級(jí)<b class='flag-5'>開發(fā)板</b> — 米爾<b class='flag-5'>i.MX</b>91

    恩智浦FRDM i.MX 8M Plus開發(fā)板詳解

    開發(fā)高級(jí)HMI應(yīng)用、計(jì)算機(jī)視覺系統(tǒng)以及邊緣AI項(xiàng)目時(shí),開發(fā)人員常常面臨一個(gè)共同挑戰(zhàn):如何在不依賴昂貴且復(fù)雜的開發(fā)平臺(tái)的前提下,獲得足夠的處理能力。這正是FRDM i.MX
    的頭像 發(fā)表于 11-18 15:07 ?1683次閱讀

    恩智浦FRDM i.MX 8M Plus開發(fā)板上架

    i.MX 8M Plus應(yīng)用處理器集成2個(gè)或4個(gè)Arm Cortex-A53、1個(gè)專用于實(shí)時(shí)控制的Arm Cortex-M7
    的頭像 發(fā)表于 08-16 17:38 ?2440次閱讀
    恩智浦FRDM <b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b><b class='flag-5'>開發(fā)板</b>上架

    【老法師】多核異構(gòu)處理器中M程序的啟動(dòng)、編寫和仿真

    文章,小編就將以飛凌嵌入式的OKMX8MP-C開發(fā)板為例,為大家介紹多核異構(gòu)處理器M程序的啟動(dòng)
    的頭像 發(fā)表于 08-13 09:05 ?4237次閱讀
    【老法師】<b class='flag-5'>多核</b><b class='flag-5'>異構(gòu)</b>處理器中<b class='flag-5'>M</b><b class='flag-5'>核</b>程序的啟動(dòng)、編寫和仿真

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

    i.MX 9352作為NXP 推出的新一代輕量級(jí)邊緣AI處理器,集成2個(gè)Cortex-A55和1個(gè)Cortex-M33實(shí)時(shí),其架構(gòu)設(shè)計(jì)充分體現(xiàn)了對(duì)實(shí)時(shí)性與復(fù)雜任務(wù)處理能力的兼顧。為
    的頭像 發(fā)表于 06-13 16:14 ?2468次閱讀
    【飛凌嵌入式】基于<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設(shè)計(jì)例程

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

    近日,米爾電子發(fā)布MYC-YR3506核心開發(fā)板,基于國產(chǎn)新一代入門級(jí)工業(yè)處理器瑞芯微RK3506,這款芯片采用三Cortex-A7+單核Cortex-M0
    發(fā)表于 05-16 17:20
    阳信县| 乃东县| 阳山县| 夏津县| 磐石市| 梧州市| 宾阳县| 栾城县| 岱山县| 阳曲县| 竹北市| 郎溪县| 华蓥市| 仁寿县| 永和县| 霍林郭勒市| 黎平县| 黔江区| 怀柔区| 汶川县| 正宁县| 祁东县| 吉安市| 浮山县| 邵东县| 富民县| 娱乐| 武陟县| 鸡东县| 三穗县| 申扎县| 福泉市| 湘潭县| 东莞市| 奉节县| 临江市| 阜平县| 渝中区| 塘沽区| 秦皇岛市| 公主岭市|