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

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

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

AUTOSAR中的IIC如何實(shí)現(xiàn)和配置

嵌入式軟件實(shí)戰(zhàn)派 ? 來(lái)源:嵌入式軟件實(shí)戰(zhàn)派 ? 作者:嵌入式軟件實(shí)戰(zhàn)派 ? 2022-12-12 09:25 ? 次閱讀

IIC不是AUTOSAR MCAL的標(biāo)準(zhǔn)模塊,本文探討IIC的MCAL實(shí)現(xiàn)方式,以及Vector AUTOSAR IIC的配置方法和步驟。

文末提供限時(shí)PDF版分享,敬請(qǐng)關(guān)注。

1. IIC在AUTOSAR中的“地位” 首先,我們看看AUTOSAR層次結(jié)構(gòu),綠色部分是MCAL。

f734d73a-79b8-11ed-8abf-dac502259ad0.png

按理說(shuō),IIC屬于MCU的驅(qū)動(dòng)層,應(yīng)該在MCAL里面,但是AUTOSAR的標(biāo)準(zhǔn)模塊里面并沒(méi)有包含這個(gè)IIC。

f76be1c6-79b8-11ed-8abf-dac502259ad0.png

f7aaad0c-79b8-11ed-8abf-dac502259ad0.png

如果非要按層次分,IIC只能安放在Complex Driver

f7c4b2ba-79b8-11ed-8abf-dac502259ad0.png

也許你會(huì)很好奇,為啥?MCAL和CDD有啥不一樣?如果你是初學(xué)者,建議你先把這問(wèn)題放一放,看我下面的講解。

2. IIC的MCAL實(shí)現(xiàn)方式

實(shí)際上IIC也可以按照MCAL的方式來(lái)實(shí)現(xiàn),Vector就給出了直接的解決方案,就把IIC當(dāng)MCAL來(lái)實(shí)現(xiàn)了。 下文,只針對(duì)AUTOSAR如何使用和配置IIC做講解,不詳細(xì)講解IIC的底層通信原理,但可能會(huì)提到一些概念,如果對(duì)IIC的通信原理感興趣,請(qǐng)?jiān)诰W(wǎng)上搜索學(xué)習(xí)。 AUTOSAR標(biāo)準(zhǔn)里面有很多MCAL的實(shí)現(xiàn)規(guī)范,其實(shí)IIC也可以參考其方式來(lái)實(shí)現(xiàn),例如SPI。 傳送門(mén):點(diǎn)擊鏈接查看《MCAL SPI Module原理和配置詳解》 AUTOSAR的SPI規(guī)范中提出了Channel和Sequence的概念。

f7d564de-79b8-11ed-8abf-dac502259ad0.png

同時(shí)在傳輸數(shù)據(jù)用的接口是這幾個(gè):Spi_SetupEB,然后Spi_AsyncTransmit 那么IIC也可以做這樣的Channel和Sequence,也可以按照SPI的方法做I2c_SetupEB和I2c_AsyncTransmit這樣的接口。

I2c_SetupEB

I2c_SetupEBDynamic

I2c_Asynctransmit

I2c_GetResult

I2c_GetStatus

I2c_Cancel

I2c_SequenceEndNotification

如果你沒(méi)詳細(xì)研究過(guò)這些概念或者接口,你肯定是一頭霧水。

接下來(lái)簡(jiǎn)單講解下。 Channel是IIC總線(xiàn)上的最小數(shù)據(jù)單位,這些創(chuàng)建好的Channels是用于各種用途的。 我們做IIC應(yīng)用軟件時(shí),通常會(huì)用一個(gè)buffer存儲(chǔ)數(shù)據(jù)然后發(fā)給IIC設(shè)備,而大部分IIC設(shè)備一般需要在傳輸data前,需要傳輸register或者address這樣的內(nèi)容,那么像這樣的address和data就可以做成兩個(gè)不同的channel。 理解channel的概念后,這樣還可以拓展下另一個(gè)概念Channel lists,channel list是多個(gè)channel的組合,例如往IIC設(shè)備寫(xiě)數(shù)據(jù),得先發(fā)address然后跟著數(shù)據(jù),這是有順序的一系列傳輸,即可以把這address和data兩個(gè)channel組合起來(lái)成為一個(gè)Channel list。 怎么發(fā)送這個(gè)Channel lists呢,這就需要一個(gè)叫Sequence的東西了。 Sequence是IIC總線(xiàn)上傳輸?shù)淖钚≡訂挝?,即sequence里面包含的channel list內(nèi)容是不希望被打斷的。 能理解嗎?有點(diǎn)繞?以IIC設(shè)備EEPROM講解下可能更容易理解點(diǎn)。

Eep_WriteSequence

I2cChannelWriteCmd

I2cChannelWriteData (chained)

Eep_ReadSequence

I2cChannelReadCmd

I2cChannelReadData

Eep_AckSequence

I2cChannelAck

上面,怎么給EEPROM寫(xiě)數(shù)據(jù)呢?I2cChannelWriteCmd首先將EEPROM的address發(fā)過(guò)去,這個(gè)地址就是你想寫(xiě)數(shù)據(jù)的地址哈,接著再通過(guò)I2cChannelWriteData發(fā)想寫(xiě)入的data。(咦?上面的chained是啥玩意?等等別急。) 有那么一點(diǎn)點(diǎn)概念了吧。 接著,你又會(huì)問(wèn)I2c_SetupEB和I2c_AsyncTransmit怎么跟這些Channel和Sequence扯上關(guān)系呢? 那就再拿出幾個(gè)栗子來(lái)看看吧,手把手教到你懂。 以下按7-bit地址講解。

例子1:給0x20地址設(shè)備發(fā)送10個(gè)字節(jié)的數(shù)據(jù)。

I2c_SetupEB(Channel,Buffer,NULL_PTR,10)
I2c_AsyncTransmit(Sequence)

這個(gè)很簡(jiǎn)單,就是直接理解為IIC直接將address和data一起發(fā)出去。

f7f6b6c0-79b8-11ed-8abf-dac502259ad0.png

*注:途中的S表示IIC的Start,RS表示ReStart,P表示Stop,下同

例子2:由兩個(gè)不同Channel組成的Sequence,給0x20地址設(shè)備發(fā)送2和8個(gè)字節(jié)的數(shù)據(jù)。

I2c_SetupEB(CH01,Buffer0,NULL_PTR,2)
I2c_SetupEB(CH02, Buffer1, NULL_PTR, 8)
I2c_AsyncTransmit(Sequence)

這個(gè)也很簡(jiǎn)單,不帶Chain特性的,IIC會(huì)重新發(fā)起Start,即restart。

f8222652-79b8-11ed-8abf-dac502259ad0.png

例子3:由三個(gè)不同Channel組成的Sequence,給0x20地址設(shè)備發(fā)送2、8和4個(gè)字節(jié)的數(shù)據(jù)。其中CH03這個(gè)Channel是帶Chain的。

I2c_SetupEB(CH01, Buffer0, NULL_PTR, 2)
I2c_SetupEB(CH02, Buffer1, NULL_PTR, 8)
I2c_SetupEB(CH03,Buffer2,NULL_PTR,4)
I2c_AsyncTransmit(Sequence)

因?yàn)镃H03帶Chain,所以是接著CH02發(fā)的,沒(méi)有restart。

f83815de-79b8-11ed-8abf-dac502259ad0.png

Chain的特性就可以簡(jiǎn)單理解為,是跟上一個(gè)Channel鏈起來(lái)的,所以Chain是不可以在第一個(gè)Channel的。這個(gè)要注意。

上面講的都是基于7-bit地址的,似乎都上send或者write數(shù)據(jù)的情況。 下面講解8-bit地址,讀數(shù)據(jù)回來(lái)的情景。 其實(shí)7-bit地址和8-bit地址沒(méi)多大差別,看數(shù)值好像就是移了一位而已。

例子4:同樣給0x20地址設(shè)備發(fā)送2、8個(gè)字節(jié)的數(shù)據(jù)。其中CH02這個(gè)Channel的方向發(fā)生了變化。

I2c_SetupEB(CH01,Buffer0,NULL_PTR,2)(mastertransmitter)
I2c_SetupEB(CH02,NULL_PTR,Buffer1,8)(masterreceiver)
I2c_AsyncTransmit(Sequence)

注意上面代碼的buffer參數(shù)位置變了,即通信方向變了,下面的那個(gè)Channel CH02方向發(fā)生了改變,即IIC會(huì)重新發(fā)起start,即restart。

f84df12e-79b8-11ed-8abf-dac502259ad0.png

以上的例子應(yīng)該很清晰了,我想你也應(yīng)該理解了吧。 可以粗略總結(jié)下:

如果沒(méi)有Chain的話(huà),這個(gè)Channel在發(fā)送時(shí),IIC會(huì)Restart;

如果幾個(gè)不同Channel發(fā)送時(shí),Channel的方向發(fā)生了變化,IIC也會(huì)Restart;

如果Channel帶Chain,那么這個(gè)IIC是不會(huì)Restart的。

這里有個(gè)問(wèn)題,如果兩個(gè)Channel對(duì)應(yīng)兩個(gè)不同地址,后面的Channel帶Chain,會(huì)發(fā)生什么情況呢?

例子5:Channel CH01地址是0x20,CH02地址是0x22,同時(shí)CH02是Chain的。

I2c_SetupEB(CH01, Buffer0, NULL_PTR, 2) (master transmitter)
I2c_SetupEB(CH02,Buffer1,NULL_PTR,8)(mastertransmitter)
I2c_AsyncTransmit(Sequence)

從上面的推論,CH01到CH02切換時(shí),方向沒(méi)改變,而且是Chain的,所以波形是這樣的。

f86b1574-79b8-11ed-8abf-dac502259ad0.png

這里的CH02的地址被忽略了!可以跟上面的案例一起對(duì)比理解下。

3. IIC的AUTOSAR配置

講了這么多原理特點(diǎn),那么這玩意在AUTOSAR是怎么配置使用的呢?總不能光說(shuō)不練嘛!

審核編輯 :李倩

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

    關(guān)注

    7

    文章

    2613

    瀏覽量

    47011
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    292

    瀏覽量

    38142
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    339

    瀏覽量

    21357

原文標(biāo)題:AUTOSAR中的IIC如何實(shí)現(xiàn)和配置

文章出處:【微信號(hào):embedded_sw,微信公眾號(hào):嵌入式軟件實(shí)戰(zhàn)派】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Vector AUTOSAR的TISCI服務(wù)器集成

    電子發(fā)燒友網(wǎng)站提供《Vector AUTOSAR的TISCI服務(wù)器集成.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 11:16 ?0次下載
    Vector <b class='flag-5'>AUTOSAR</b><b class='flag-5'>中</b>的TISCI服務(wù)器集成

    AUTOSAR MCAL驅(qū)動(dòng)程序與演示程序的Libraries的驅(qū)動(dòng)程序有什么不同之處?

    1.關(guān)于 AUTOSAR MCAL 驅(qū)動(dòng)程序 與演示程序的 Libraries 的驅(qū)動(dòng)程序 有什么不同之處? 2.AUTOSAR MCAL 驅(qū)動(dòng)程序
    發(fā)表于 05-17 06:55

    TC387配置Autosar OS后主核跑飛了怎么解決?

    使用TC387芯片配置Autosar OS發(fā)現(xiàn)主核跑飛了,其他核正常運(yùn)行OS任務(wù)切換,PC指針指向_IF_CONST區(qū)域,D[4]寄存器為1,D[15]寄存器為4,根據(jù)這兩個(gè)寄存器用計(jì)算規(guī)則計(jì)算出的TCN和TIN好像有問(wèn)題,在Trap
    發(fā)表于 03-06 08:24

    FPGA實(shí)現(xiàn)IIC協(xié)議的設(shè)計(jì)

    今天給大家?guī)?lái)的是IIC通信,IIC協(xié)議應(yīng)用非常廣泛,例如與MPU6050進(jìn)行通信,配置OV5640攝像頭、驅(qū)動(dòng)OLED屏幕等等,都需要使用到IIC協(xié)議,所以掌握它是非常必要的,廢話(huà)不
    的頭像 發(fā)表于 03-04 10:49 ?1048次閱讀
    FPGA<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>IIC</b>協(xié)議的設(shè)計(jì)

    IIC總線(xiàn)的FPGA實(shí)現(xiàn)說(shuō)明

    DE2_TV,有關(guān)于寄存器的配置的部分,采用的方法是通過(guò)IIC的功能,這里對(duì)IIC總線(xiàn)的FPGA實(shí)現(xiàn)做個(gè)說(shuō)明。
    的頭像 發(fā)表于 01-05 10:16 ?860次閱讀
    <b class='flag-5'>IIC</b>總線(xiàn)的FPGA<b class='flag-5'>實(shí)現(xiàn)</b>說(shuō)明

    AUTOSAR架構(gòu)復(fù)雜驅(qū)動(dòng)設(shè)計(jì)

    復(fù)雜驅(qū)動(dòng)(Complex Driver,CDD)是一種不受 AUTOSAR 標(biāo)準(zhǔn)化約束的軟件實(shí)體,它可以通過(guò) AUTOSAR 接口和/或基礎(chǔ)軟件模塊 API 進(jìn)行訪問(wèn) AUTOSAR 組件或者被
    的頭像 發(fā)表于 12-21 10:13 ?3326次閱讀
    <b class='flag-5'>AUTOSAR</b>架構(gòu)<b class='flag-5'>中</b>復(fù)雜驅(qū)動(dòng)設(shè)計(jì)

    如何在非Autosar應(yīng)用執(zhí)行I2C?

    我是NXP產(chǎn)品的新產(chǎn)品,我試圖了解它的生態(tài)系統(tǒng)。我需要在非Autosar應(yīng)用執(zhí)行I2C,所以我需要了解它是如何工作的,所以我有一些問(wèn)題: 1) 在 RTD_I2C_UM.pdf 寫(xiě)道: I2c
    發(fā)表于 11-13 07:04

    如何使用配置工具配置 i. MX7D的IIC和UART配置 ?

    請(qǐng)指導(dǎo)我如何使用配置工具配置 i. MX7D 的 IIC 和 UART 配置 ? 我之所以要求這樣做,是因?yàn)槲壹僭O(shè)ITC和UART通常通過(guò)開(kāi)放排氣管控制。 在外圍部分下的
    發(fā)表于 11-13 06:23

    TouchGFX開(kāi)發(fā)(3)----使用TouchGFX配置IIC接口OLED

    TouchGFX開(kāi)發(fā)(3)----使用TouchGFX配置IIC接口OLED
    的頭像 發(fā)表于 11-09 15:31 ?1298次閱讀
    TouchGFX開(kāi)發(fā)(3)----使用TouchGFX<b class='flag-5'>配置</b><b class='flag-5'>IIC</b>接口OLED

    AUTOSARCAN信號(hào)是如何觸發(fā)COM回調(diào)的呢?

    AUTOSAR,COM模塊提供了兩種機(jī)制來(lái)處理接收到的PDU:ComRxPduCallout和ComNotification
    的頭像 發(fā)表于 11-01 10:26 ?1380次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>中</b>CAN信號(hào)是如何觸發(fā)COM回調(diào)的呢?

    AUTOSAR OS操作系統(tǒng)功能特性

    AUTOSAR OS AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR架構(gòu)的一個(gè)組件,
    的頭像 發(fā)表于 10-27 16:55 ?1851次閱讀

    AUTOSAR CP的復(fù)雜驅(qū)動(dòng)是什么

    、ASIC等,以滿(mǎn)足特殊的功能和時(shí)序要求。此外,CDD還可以用于實(shí)現(xiàn)增強(qiáng)的服務(wù)/協(xié)議或封裝非AUTOSAR系統(tǒng)的傳統(tǒng)功能。CDD的實(shí)現(xiàn)可能與應(yīng)用、微控制器和ECU有關(guān)。最后,CDD可以作為引入現(xiàn)有或新概念到
    的頭像 發(fā)表于 10-27 15:39 ?1819次閱讀
    <b class='flag-5'>AUTOSAR</b> CP的復(fù)雜驅(qū)動(dòng)是什么

    AUTOSAR經(jīng)典平臺(tái)介紹

    汽車(chē)電子系統(tǒng)的軟件組件、運(yùn)行時(shí)環(huán)境和通信機(jī)制,以實(shí)現(xiàn)模塊化、可重用和可擴(kuò)展的系統(tǒng)開(kāi)發(fā)。 在AUTOSAR CP,軟件組件被分為應(yīng)用軟件組件(SWC)和基礎(chǔ)軟件組件(BSW)。SWC是實(shí)現(xiàn)
    的頭像 發(fā)表于 10-27 15:30 ?1226次閱讀
    <b class='flag-5'>AUTOSAR</b>經(jīng)典平臺(tái)介紹

    AUTOSAR架構(gòu)自適應(yīng)平臺(tái)

    。AUTOSAR架構(gòu)的目標(biāo)是實(shí)現(xiàn)汽車(chē)電子系統(tǒng)的模塊化、可重用和可擴(kuò)展,以提高開(kāi)發(fā)效率和系統(tǒng)的可靠性。 AUTOSAR架構(gòu)由三個(gè)主要的層次組成:應(yīng)用層(Application Layer)、運(yùn)行時(shí)環(huán)境層
    的頭像 發(fā)表于 10-27 15:23 ?1107次閱讀
    <b class='flag-5'>AUTOSAR</b>架構(gòu)自適應(yīng)平臺(tái)

    解讀AUTOSAR模式管理BswM配置

    模式管理是AUTOSAR的一個(gè)難點(diǎn),也可以說(shuō)是最龐雜的一塊。因?yàn)槟J焦芾碡灤┱麄€(gè)CP Autosar流程,幾乎所有模塊都跟BSWM發(fā)生著聯(lián)系。
    的頭像 發(fā)表于 10-26 16:55 ?1771次閱讀
    解讀<b class='flag-5'>AUTOSAR</b>模式管理BswM<b class='flag-5'>配置</b>