国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 5043|回復: 0
打印 上一主題 下一主題

如何實現(xiàn) i.MX8MPM核SPI間的通訊

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2023-4-11 13:36:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本文小編將從應用角度為大家講解飛凌嵌入式OKMX8MP-C開發(fā)板的M核SPI間通訊的實現(xiàn)方式。

01SPI主模式

1. SPI初始化

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

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

[url=]復制[/url]

CLOCK_SetRootMux(kCLOCK_RootEcspi2, kCLOCK_EcspiRootmuxSysPll1); //SPI2總線時鐘使用PLL1-800MHz  CLOCK_SetRootDivider(kCLOCK_RootEcspi2, 2U, 5U);    //分頻因子為2*5=10,設置SPI2總線時鐘為80MHz


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

[url=]復制[/url]

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。

[url=]復制[/url]

#define TRANSFER_BAUDRATE 500000U // 速率 500K


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

[url=]復制[/url]

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


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

[url=]復制[/url]

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


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

[url=]復制[/url]

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


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

[url=]復制[/url]


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


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

[url=]復制[/url]

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ù)是否一致,輸出比對結果。如一致,本次傳輸結束,等待輸入任何按鍵啟動下一次傳輸。

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

[url=]復制[/url]

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ù)對比:

[url=]復制[/url]

"#000000">for (i = 0U; i < TRANSFER_SIZE; i++)  {      if (masterTxData</font> != masterRxDatafont>)      {         errorCount++;      }  }

02SPI從模式

1. SPI初始化

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

[url=]復制[/url]

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


2. SPI收發(fā)流程

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

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

(1)SPI接收數(shù)據(jù):
[url=]復制[/url]

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

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


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

03A核修改

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




1. 修改設備樹

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

[url=]復制[/url]

&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。

04程序驗證

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ù)據(jù);

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


[


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



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

END

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黑寡妇香蕉视频 | 91在线亚洲 | 丁香婷婷视频 | 免费一级做a爰片性色毛片 免费一级做a爰片久久毛片潮 | 91精品手机国产在线能 | 精品欧美成人bd高清在线观看 | 碰碰碰人人澡人人爱摸 | 国产成人在线免费 | 久久精品毛片 | 四虎国产永久在线观看 | 不卡中文字幕在线观看 | 日日草天天干 | 亚欧有色亚欧乱色视频 | 一个人hd免费完整高清视频 | 日韩一级免费视频 | 91国内揄拍国内精品对白不卡 | 成人黄色在线网站 | 另类久久 | 四虎影院最新网站 | 手机在线观看黄色网址 | 日韩特黄特色大片免费视频 | www.亚洲5555.com | 亚洲国产欧美一区二区欧美 | 国内精品福利在线视频 | 在线麻豆国产传媒60在线观看 | 五月天男人天堂 | 国产精品久久久久毛片 | 四虎成人免费影院网址 | 成人综合在线视频 | 91高端极品外围在线观看 | 久久久久久久国产 | 国产高清一级在线观看 | 韩剧伦理年轻的嫂子6在线观看 | 伊人久久婷婷 | 每日更新国产精品视频 | 久草综合在线观看 | 欧乱色国产精品兔费视频 | 正在播放91大神调教偷偷 | 爱爱永久免费视频网站 | 国产一区二区三区高清 | 99久久精品一区二区三区 |