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

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

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

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

兩個(gè)MCU之間快速傳輸數(shù)據(jù)的,常用方法

哈哈hfgfdf ? 來源:嵌入式學(xué)習(xí)資料 ? 作者:嵌入式學(xué)習(xí)資料 ? 2023-02-05 01:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、MCU之間通信的主要方式

1、采用硬件UART進(jìn)行異步串行通信

這是一種占用口線少,有效、可靠的通信方式;但遺憾的是許多小型單片機(jī)沒有硬件UART,有些也只有1個(gè)UART,如果系統(tǒng)還要與上位機(jī)通信的話,硬件資源是不夠的。這種方法一般用于單片機(jī)有硬件UART且不需與外界進(jìn)行串行通信或采用雙UART單片機(jī)的場(chǎng)合。

2、采用片內(nèi)SPI接口I2C總線模塊串行通信形式

SPI/I2C接口具有硬件簡(jiǎn)單、軟件編程容易等特點(diǎn),但目前大多數(shù)低端的單片機(jī)不具備硬件SPI/I2C外設(shè)。

3、可以利用軟件模擬SPI/I2C模式通信

這種方式很難模擬從機(jī)模式,通信雙方對(duì)每一位要做出響應(yīng),通信速率與軟件資源的開銷會(huì)形成一個(gè)很大的矛盾,處理不好會(huì)導(dǎo)致系統(tǒng)整體性能急劇下降。這種方法只能用于通信量極少的場(chǎng)合。

4、口對(duì)口并行通信

利用單片機(jī)的口線直接相連,加上1~2條握手信號(hào)線。這種方式的特點(diǎn)是通信速度快,1次可以傳輸4位或8位,甚至更多,但需要占用大量的口線,而且數(shù)據(jù)傳遞是準(zhǔn)同步的。在一個(gè)單片機(jī)向另一個(gè)單片機(jī)傳送1個(gè)字節(jié)以后,必須等到另一個(gè)單片機(jī)的接收響應(yīng)信號(hào)后才能傳送下一個(gè)數(shù)據(jù)。一般用于一些硬件口線比較富裕的場(chǎng)合。

5、利用雙口RAM作為緩沖器通信

這種方式的最大特點(diǎn)就是通信速度快,兩邊都可以直接用讀寫存儲(chǔ)器的指令直接操作;但這種方式需要大量的口線,而且雙口RAM的價(jià)格很高,一般只用于一些對(duì)速度有特殊要求的場(chǎng)合。

總結(jié)

從上面幾種方案來看,各種方法對(duì)硬件都有很大的要求與限制,特別是難以在功能簡(jiǎn)單的單片機(jī)上實(shí)現(xiàn),因此尋求一種簡(jiǎn)單、有效的,能在各種單片機(jī)之間通信的方法具有重要的意義。③、④方案中,雙方單片機(jī)要傳遞的每一位或每一個(gè)字節(jié)做出響應(yīng),通信數(shù)據(jù)量較大時(shí)會(huì)耗費(fèi)大量的軟件資源,這在一些實(shí)時(shí)性要求高的地方是不允許的。

針對(duì)這一問題,假設(shè)在單片機(jī)之間增加1個(gè)數(shù)據(jù)緩沖器,大批數(shù)據(jù)先寫入緩沖區(qū),然后再讓對(duì)方去取,各個(gè)單片機(jī)對(duì)數(shù)據(jù)緩沖器都是主控模式,這樣必然會(huì)大大提高通信效率。

談到數(shù)據(jù)緩沖,我們馬上會(huì)想到并行RAM,但是并行RAM需要占用大量的口線(數(shù)據(jù)線+地址線+讀寫線+片選線+握手線),一般在16條以上。這是一個(gè)讓人望而生畏的數(shù)字,而且會(huì)大大增加PCB面積并給布線帶來一定的困難,極少有人采用這種方式。

串行接口的RAM在市場(chǎng)上很少見,不但難以買到而且價(jià)格很高。移位寄存器也可以做數(shù)據(jù)緩沖器,但目前容量最大的也只128位,因?yàn)槭恰跋冗M(jìn)先出”結(jié)構(gòu),所以不管傳遞數(shù)據(jù)多少,接收方必須移完整個(gè)寄存器,靈活性差而且大容量的移位寄存器也是少見難買的。一種被稱為“鐵電存儲(chǔ)器”芯片的出現(xiàn),給我們帶來了解決方法。

二、采用鐵電存儲(chǔ)器

利用鐵電存儲(chǔ)器作為數(shù)據(jù)緩沖器的通信方式,鐵電存儲(chǔ)器是美國Ramtran公司推出的一種非易失性存儲(chǔ)器件,簡(jiǎn)稱FRAM。

與普通EEPROM、Flash-ROM相比,它具有不需寫入時(shí)間、讀寫次數(shù)無限,沒有分布結(jié)構(gòu)可以連續(xù)寫放的優(yōu)點(diǎn),因此具有RAM與EEPROM的雙得特性,而且價(jià)格相對(duì)較低。

現(xiàn)在大多數(shù)的單片機(jī)系統(tǒng)配備串行EEPROM(如24CXX、93CXX等)用來存儲(chǔ)參數(shù)。如果用1片F(xiàn)RAM代替原有EEPROM,使它既能存儲(chǔ)參數(shù),又能作串行數(shù)據(jù)通信的緩沖器。

247b7ac8-a4b1-11ed-92c9-dac502259ad0.png

2個(gè)(或多個(gè))單片機(jī)與1片F(xiàn)RAM接成多主-從的I2C總線方式,增加幾條握手線,即可得到簡(jiǎn)單高效的通信硬件電路。

24a270ce-a4b1-11ed-92c9-dac502259ad0.png

在軟件方面,只要解決好I2C多主-從的控制沖突與通信協(xié)議問題,即可實(shí)現(xiàn)簡(jiǎn)單、高效、可靠的通信了。

三、通訊實(shí)例

實(shí)例(雙單片機(jī)結(jié)構(gòu),多功能低功耗系統(tǒng))

(1)硬件

W78LE52與EMC78P458組成一個(gè)電池供電、可遠(yuǎn)程通信的工業(yè)流量計(jì)。

78P458采用32.768kHz晶振,工作電流低,不間斷工作,實(shí)時(shí)采集傳感器的脈沖及溫度、壓力等一些模擬量。

W78LE52采用11.0592MHz晶振,由于它的工作電流較大,采用間斷工作,負(fù)責(zé)流量的非線性校正、參數(shù)輸入、液晶顯示、與上位機(jī)通信等功能,它的UART用于遠(yuǎn)程通信。

2個(gè)單片機(jī)共用1片I2C接口的FRAM(FM24CL16)組成二主一從的I2C總線控制方式,W78LE52的P3.5、P3.2分別與78P458的P51、P50連接作握手信號(hào)線A與B。

我們把握手線A(簡(jiǎn)稱A線)定義為總線控制、指示線,主要用于獲取總線控制權(quán)與判別總線是否“忙”;握手線B(簡(jiǎn)稱B線)定義為通知線,主要用于通知對(duì)方取走數(shù)據(jù)。

(2)I2C總線仲裁

由于我們采用的是二主一從的I2C總線方式,因此防止2個(gè)主機(jī)同時(shí)去操作從機(jī)(防沖突)是一個(gè)非常重要的問題。

帶有硬件I2C模塊的器件一般是這樣的,器件內(nèi)部有1個(gè)總線仲裁器與總線超時(shí)定時(shí)器:當(dāng)總線超時(shí)定時(shí)器超時(shí)后指示總線空閑,這時(shí)單片機(jī)可以發(fā)出獲取總線命令,總線仲裁器通過一系列操作后確認(rèn)獲取總線成功或失??;超時(shí)定時(shí)器清零,以后的每一個(gè)SCL狀態(tài)變化對(duì)總線所有主機(jī)的超時(shí)定時(shí)器進(jìn)行清零,以防止它溢出,指示總線正處于“忙”狀態(tài),直到一個(gè)主機(jī)對(duì)總線控制結(jié)束不再產(chǎn)生SCL脈沖;超時(shí)定時(shí)器溢出,總線重新回到“空閑”狀態(tài)。

但是目前大多數(shù)單片機(jī)沒有配備硬件I2C模塊,而且當(dāng)2個(gè)主機(jī)的工作頻率相差較大時(shí),超時(shí)定時(shí)器定時(shí)值只能設(shè)為較大的值,這樣也會(huì)影響總線的使用效率。

下面介紹一種用軟件模擬I2C總線仲裁的方式(I2C讀寫操作程序的軟件模擬十分多見,這里不再多述)

用1條握手線A,當(dāng)A線高電平時(shí),指示總線空閑;當(dāng)其中一個(gè)主機(jī)要獲取總線控制權(quán)時(shí),先查詢總線是否空閑,“忙”則退出,空閑則向A線發(fā)送一個(gè)測(cè)試序列(如:1000101011001011),在每次發(fā)送位“1”后讀取的A線狀態(tài)。

如果讀取狀態(tài)為“0”,馬上退出,說明有其它器件已經(jīng)搶先獲取總線;如果一個(gè)序列讀取的A線狀態(tài)都正確,則說明已成功獲得總線控制權(quán),這時(shí)要拉低A線以指示總線“忙”,直到讀寫高A線,使總線回到“空閑”狀態(tài)。不同的主機(jī)采用不同的測(cè)試序列,或產(chǎn)生隨機(jī)測(cè)試序列,測(cè)試序列長度可以選得長一些,這樣可以增加仲裁的可靠性。

(3)通信協(xié)議

一個(gè)可靠通信體系,除了好的硬件電路外,通信協(xié)議也至關(guān)重要。在單片機(jī)系統(tǒng)RAM資源與執(zhí)行速度都非常有限的情況下,一個(gè)簡(jiǎn)捷有效的協(xié)議是非常重要的。下面具體介紹一種比較適用于單片機(jī)通信的協(xié)議,數(shù)據(jù)以包的形式傳送。

數(shù)據(jù)包結(jié)構(gòu):

① 包頭——指示數(shù)據(jù)包的開始,有利于包完整性檢測(cè),有時(shí)可省略;

② 地址——數(shù)據(jù)包要傳送的目標(biāo)地址,若只有雙機(jī)通信或硬件區(qū)分地址可以省略;

③ 包長度——指示整個(gè)數(shù)據(jù)包的長度;

④ 命令——指示本數(shù)據(jù)包的作用;

⑤ 參數(shù)——需要傳送的數(shù)據(jù)與參數(shù);

⑥ 校驗(yàn)——驗(yàn)證數(shù)據(jù)包的正確性,可以是和校驗(yàn)、異或校驗(yàn)、CRC校驗(yàn)等或者是它們的組合;

⑦ 包尾——指示數(shù)據(jù)包的結(jié)尾,有利于包完整性檢測(cè),有時(shí)可省略。

(4)通信流程

首先,要在FRAM里劃分好各個(gè)區(qū)域,各個(gè)單片機(jī)的參數(shù)區(qū)、數(shù)據(jù)接收區(qū)等。

然后,單片機(jī)可以向另一個(gè)單片機(jī)發(fā)送數(shù)據(jù)包,發(fā)送完畢之后通過向握手線B發(fā)送1個(gè)脈沖通知對(duì)方取走數(shù)據(jù);接收方讀取數(shù)據(jù)并進(jìn)行處理后,向FRAM內(nèi)發(fā)送方的數(shù)據(jù)接收區(qū)寫入回傳數(shù)據(jù)或通信失敗標(biāo)志,再向握手線B發(fā)送1個(gè)脈沖回應(yīng)發(fā)送方。

如果需要單片機(jī)2發(fā)送的話,只需交換一下操作過程即可。

四、項(xiàng)目小節(jié)

通過實(shí)踐可知,以上方法是可行的。與其它方法相比具有發(fā)下優(yōu)點(diǎn):

① 簡(jiǎn)單 占用單片機(jī)口線少(SCL、SDA、握手線A、握手線B)。 ② 通用 軟件模擬I2C主機(jī)方式,可以在任何種類的單片機(jī)之間通信。 ③ 高效 由于采用數(shù)據(jù)緩沖,可以在不同時(shí)鐘頻率、不同速度的單片機(jī)之間通信;讀寫數(shù)據(jù)時(shí),可以I2C總線的最高速度進(jìn)行,可以實(shí)現(xiàn)1次傳送大量數(shù)據(jù);在一個(gè)單片機(jī)向FRAM傳送數(shù)據(jù)時(shí),另一個(gè)單片機(jī)無須一一作出響應(yīng)或等待,可以進(jìn)行其它程序操作,提高軟件工作效率。 ④ 靈活 通信硬件接口對(duì)于各個(gè)單片機(jī)是對(duì)等的,通過軟件配置,每個(gè)單片機(jī)既可以根據(jù)需要主動(dòng)發(fā)送通信,也可以只響應(yīng)其它單片機(jī)的呼叫。 ⑤容易擴(kuò)展 通過增加地址識(shí)別線,修改通信協(xié)議,即可做到多機(jī)通信。 以下是需要注意的地方: ① 為了提高通信效率,握手線B最好使用中斷端口,負(fù)脈沖寬度一定要滿足速度較低單片機(jī)中斷信號(hào)要求。如果沒有中斷的話應(yīng)增加1條口線,用改變端口狀態(tài)的方法通知對(duì)方,等待對(duì)方查詢,而不是負(fù)脈沖。 ② 向?qū)Ψ桨l(fā)送負(fù)脈沖時(shí),應(yīng)屏蔽自己的中斷。 ③ 由于參數(shù)與通信緩沖區(qū)同時(shí)設(shè)在同一片F(xiàn)RAM內(nèi),要避免對(duì)參數(shù)部分的誤操作。一個(gè)較好的解決辦法是把參數(shù)存放在地址的后半部分(A2=1),在進(jìn)行通信操作時(shí),把FRAM的WP引腳拉高(地址在后半部分的單元寫保護(hù)),這樣可以有效地防止測(cè)驗(yàn)時(shí)對(duì)參數(shù)區(qū)誤操作。 ④ 由于I2C總線在一個(gè)時(shí)間段內(nèi)只有1個(gè)主機(jī)和1個(gè)從機(jī),所以當(dāng)1個(gè)單片機(jī)正在寫通信數(shù)據(jù)時(shí),另一個(gè)單片機(jī)是不能對(duì)FRAM進(jìn)行操作的。如果需要實(shí)時(shí)、頻繁地讀取FRAM中參數(shù)的話,請(qǐng)預(yù)先將參數(shù)讀入RAM單元使用或另外增加專門存放參數(shù)的芯片。

審核編輯黃宇

聲明:本文內(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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44989

    瀏覽量

    650367
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17979

    瀏覽量

    366737
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91838
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6206

    瀏覽量

    137806
  • fram
    +關(guān)注

    關(guān)注

    2

    文章

    285

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    如何使用 SPI 全雙工在兩個(gè) 5LP MPU 之間連接 RAM?

    我需要將兩個(gè) 5LP MPU 連接在一起以鏡像兩個(gè) 5LP MPU 內(nèi)的 RAM。 我認(rèn)為這將是 DMA 的一個(gè)功能,但我不確定如何實(shí)現(xiàn)該功能。 我的主 SPI 單元將向從屬 MPU 發(fā)送一個(gè)
    發(fā)表于 07-15 06:20

    請(qǐng)問一個(gè)藍(lán)牙芯片可以同時(shí)傳輸兩個(gè)不同的數(shù)據(jù)嗎?

    現(xiàn)在有兩個(gè)不同的數(shù)據(jù),想用一個(gè)藍(lán)牙芯片進(jìn)行傳輸,可以做到嗎?求解
    發(fā)表于 07-07 06:28

    DA芯片電源和MCU電源是兩個(gè)不同電源,MCU斷電重啟后DA無輸出,為什么?

    我司使用AD5724AREZ產(chǎn)品做一款模擬量輸出的模塊,AD5724AREZ的電源是IO電源單獨(dú)供的隔離電,MCU是另一個(gè)電源,如果兩個(gè)電源同時(shí)斷開重啟AD5724AREZ的所有通道就正常輸出,如果
    發(fā)表于 04-16 07:04

    ST25DV64與HR11 NFC模塊之間如何實(shí)現(xiàn)數(shù)據(jù)傳輸?

    主要目的:實(shí)現(xiàn)在兩個(gè)NFC模塊之間進(jìn)行數(shù)據(jù)傳輸 在網(wǎng)絡(luò)上搜索了一下,大概有以下方式: 1、使用FTM模式; 2、使用NDFF協(xié)議,比較復(fù)雜,目前只是想實(shí)現(xiàn)簡(jiǎn)單的兩個(gè)模塊
    發(fā)表于 03-10 08:00

    ADS7945兩個(gè)通道之間會(huì)有干擾,為什么?

    各位大俠們,最近使用ADS7945這個(gè)芯片,發(fā)現(xiàn)它的兩個(gè)通道之間會(huì)有干擾,有沒有遇到同樣問題的!?求解!在線等待!
    發(fā)表于 02-11 06:23

    如何把兩個(gè)數(shù)據(jù)返回給調(diào)用函數(shù)

    函數(shù)的處理結(jié)果包含兩個(gè)數(shù)據(jù),如何把兩個(gè)數(shù)據(jù)返回給調(diào)用函數(shù)? 第一種,把兩個(gè)數(shù)據(jù)封裝成一個(gè)結(jié)構(gòu)體,函數(shù)返回結(jié)構(gòu)體。 調(diào)用函數(shù)的地方同樣用結(jié)構(gòu)體去接收函數(shù)的返回值。 第二種,把返回值保存在
    的頭像 發(fā)表于 01-08 10:15 ?408次閱讀

    用F28069控制AFE031來實(shí)現(xiàn)兩個(gè)F28069和AFE031之間數(shù)據(jù)傳輸,怎么實(shí)現(xiàn)?

    我想通過用F28069控制AFE031來實(shí)現(xiàn)兩個(gè)F28069和AFE031之間數(shù)據(jù)傳輸。并且我想只依賴HAL的API庫來開發(fā),盡量不涉及硬件底層的編程,然后PHY層自己來寫,這個(gè)思路可行嗎? 我
    發(fā)表于 12-20 15:59

    uart波特率和傳輸頻率的關(guān)系 UART串口的常用波特率為多少

    頻率是兩個(gè)關(guān)鍵參數(shù),它們之間存在一定的關(guān)系,并且UART串口有一系列常用的波特率。以下是對(duì)這兩個(gè)概念的介紹。 一、UART波特率和傳輸頻率的
    的頭像 發(fā)表于 10-06 16:12 ?6990次閱讀
    uart波特率和<b class='flag-5'>傳輸</b>頻率的關(guān)系 UART串口的<b class='flag-5'>常用</b>波特率為多少

    如何讓兩個(gè)設(shè)備通過4G進(jìn)行點(diǎn)對(duì)點(diǎn)數(shù)據(jù)映射

    4G模塊點(diǎn)對(duì)點(diǎn)傳輸是指通過蜂窩網(wǎng)絡(luò)(如LTE網(wǎng)絡(luò))實(shí)現(xiàn)兩個(gè)遠(yuǎn)程設(shè)備之間的直接數(shù)據(jù)通信。與通過云服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)不同,點(diǎn)對(duì)點(diǎn)通信允許設(shè)備通過各自
    的頭像 發(fā)表于 09-30 12:10 ?3240次閱讀
    如何讓<b class='flag-5'>兩個(gè)</b>設(shè)備通過4G進(jìn)行點(diǎn)對(duì)點(diǎn)<b class='flag-5'>數(shù)據(jù)</b>映射

    ad如何設(shè)置兩個(gè)元器件的距離

    在Altium Designer(簡(jiǎn)稱AD)中設(shè)置兩個(gè)元器件之間的距離,主要是通過設(shè)置元器件間的安全間距(Clearance)規(guī)則來實(shí)現(xiàn)的。這個(gè)規(guī)則定義了元器件之間、元器件與走線之間
    的頭像 發(fā)表于 09-02 15:31 ?1.7w次閱讀

    觸發(fā)器的兩個(gè)穩(wěn)定狀態(tài)分別是什么

    觸發(fā)器作為數(shù)字電路中的基本邏輯單元,具有兩個(gè)穩(wěn)定狀態(tài),這兩個(gè)狀態(tài)通常用于表示二進(jìn)制數(shù)碼中的0和1。
    的頭像 發(fā)表于 08-12 11:01 ?3070次閱讀

    XTR111輸出做隔離的話,是不是需要把OD及EF兩個(gè)信號(hào)與MCU之間做數(shù)字隔離?

    如下所示電路設(shè)計(jì),XTR111引腳的信號(hào)是不是共地的,如果我想要做隔離,是不是需要把OD及EF兩個(gè)信號(hào)與MCU之間做數(shù)字隔離?,這邊有什么建議嗎
    發(fā)表于 07-30 08:18

    二總線——MCU有線數(shù)據(jù)傳輸

    MCU之間數(shù)據(jù)交互,如果距離較遠(yuǎn)且在遮蔽物較多無線信號(hào)不好的場(chǎng)所一般要使用總線技術(shù),例如RS485、CAN等等,但是近些年有發(fā)展出一種現(xiàn)場(chǎng)數(shù)字總線技術(shù):二總線。與RS485/CAN一樣是MC
    發(fā)表于 07-23 13:28

    如何使用AT SAVETRANSLINK命令在兩個(gè)設(shè)備(2 個(gè) esp-07)之間創(chuàng)建橋接?

    如何使用 AT SAVETRANSLINK 命令在兩個(gè)設(shè)備(2 個(gè) esp-07)之間創(chuàng)建透明橋接?還是到目前為止是不可能的?
    發(fā)表于 07-17 06:53

    無法在兩個(gè)CWMODE=3 ESP8266之間發(fā)送數(shù)據(jù)怎么解決?

    連接兩個(gè)ESP8266。種設(shè)置 CWMODE_DEF=3 問題 - 如何在 CWMODE=3 中在兩者之間發(fā)送數(shù)據(jù)??梢赃x擇通過STATION連接或AP SERVER連接進(jìn)行CIP
    發(fā)表于 07-17 06:34