0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AUTOSAR中的IIC如何实现和配置

嵌入式软件实战派 来源:嵌入式软件实战派 作者:嵌入式软件实战派 2022-12-12 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

IIC不是AUTOSAR MCAL的标准模块,本文探讨IIC的MCAL实现方式,以及Vector AUTOSAR IIC的配置方法和步骤。

文末提供限时PDF版分享,敬请关注。

1. IIC在AUTOSAR中的“地位” 首先,我们看看AUTOSAR层次结构,绿色部分是MCAL。

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

按理说,IIC属于MCU的驱动层,应该在MCAL里面,但是AUTOSAR的标准模块里面并没有包含这个IIC。

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

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

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

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

也许你会很好奇,为啥?MCAL和CDD有啥不一样?如果你是初学者,建议你先把这问题放一放,看我下面的讲解。

2. IIC的MCAL实现方式

实际上IIC也可以按照MCAL的方式来实现,Vector就给出了直接的解决方案,就把IIC当MCAL来实现了。 下文,只针对AUTOSAR如何使用和配置IIC做讲解,不详细讲解IIC的底层通信原理,但可能会提到一些概念,如果对IIC的通信原理感兴趣,请在网上搜索学习。 AUTOSAR标准里面有很多MCAL的实现规范,其实IIC也可以参考其方式来实现,例如SPI。 传送门:点击链接查看《MCAL SPI Module原理和配置详解》 AUTOSAR的SPI规范中提出了Channel和Sequence的概念。

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

同时在传输数据用的接口是这几个: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

如果你没详细研究过这些概念或者接口,你肯定是一头雾水。

接下来简单讲解下。 Channel是IIC总线上的最小数据单位,这些创建好的Channels是用于各种用途的。 我们做IIC应用软件时,通常会用一个buffer存储数据然后发给IIC设备,而大部分IIC设备一般需要在传输data前,需要传输register或者address这样的内容,那么像这样的address和data就可以做成两个不同的channel。 理解channel的概念后,这样还可以拓展下另一个概念Channel lists,channel list是多个channel的组合,例如往IIC设备写数据,得先发address然后跟着数据,这是有顺序的一系列传输,即可以把这address和data两个channel组合起来成为一个Channel list。 怎么发送这个Channel lists呢,这就需要一个叫Sequence的东西了。 Sequence是IIC总线上传输的最小原子单位,即sequence里面包含的channel list内容是不希望被打断的。 能理解吗?有点绕?以IIC设备EEPROM讲解下可能更容易理解点。

Eep_WriteSequence

I2cChannelWriteCmd

I2cChannelWriteData (chained)

Eep_ReadSequence

I2cChannelReadCmd

I2cChannelReadData

Eep_AckSequence

I2cChannelAck

上面,怎么给EEPROM写数据呢?I2cChannelWriteCmd首先将EEPROM的address发过去,这个地址就是你想写数据的地址哈,接着再通过I2cChannelWriteData发想写入的data。(咦?上面的chained是啥玩意?等等别急。) 有那么一点点概念了吧。 接着,你又会问I2c_SetupEB和I2c_AsyncTransmit怎么跟这些Channel和Sequence扯上关系呢? 那就再拿出几个栗子来看看吧,手把手教到你懂。 以下按7-bit地址讲解。

例子1:给0x20地址设备发送10个字节的数据。

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

这个很简单,就是直接理解为IIC直接将address和data一起发出去。

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

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

例子2:由两个不同Channel组成的Sequence,给0x20地址设备发送2和8个字节的数据。

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

这个也很简单,不带Chain特性的,IIC会重新发起Start,即restart。

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

例子3:由三个不同Channel组成的Sequence,给0x20地址设备发送2、8和4个字节的数据。其中CH03这个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)

因为CH03带Chain,所以是接着CH02发的,没有restart。

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

Chain的特性就可以简单理解为,是跟上一个Channel链起来的,所以Chain是不可以在第一个Channel的。这个要注意。

上面讲的都是基于7-bit地址的,似乎都上send或者write数据的情况。 下面讲解8-bit地址,读数据回来的情景。 其实7-bit地址和8-bit地址没多大差别,看数值好像就是移了一位而已。

例子4:同样给0x20地址设备发送2、8个字节的数据。其中CH02这个Channel的方向发生了变化。

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

注意上面代码的buffer参数位置变了,即通信方向变了,下面的那个Channel CH02方向发生了改变,即IIC会重新发起start,即restart。

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

以上的例子应该很清晰了,我想你也应该理解了吧。 可以粗略总结下:

如果没有Chain的话,这个Channel在发送时,IIC会Restart;

如果几个不同Channel发送时,Channel的方向发生了变化,IIC也会Restart;

如果Channel带Chain,那么这个IIC是不会Restart的。

这里有个问题,如果两个Channel对应两个不同地址,后面的Channel带Chain,会发生什么情况呢?

例子5:Channel CH01地址是0x20,CH02地址是0x22,同时CH02是Chain的。

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

从上面的推论,CH01到CH02切换时,方向没改变,而且是Chain的,所以波形是这样的。

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

这里的CH02的地址被忽略了!可以跟上面的案例一起对比理解下。

3. IIC的AUTOSAR配置

讲了这么多原理特点,那么这玩意在AUTOSAR是怎么配置使用的呢?总不能光说不练嘛!

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2859

    浏览量

    53598
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40866
  • AUTOSAR
    +关注

    关注

    11

    文章

    414

    浏览量

    23835

原文标题:AUTOSAR中的IIC如何实现和配置

文章出处:【微信号:embedded_sw,微信公众号:嵌入式软件实战派】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    是否有任何可用于多核(非 Autosar)S32K388示例?

    我正在尝试S32K388多核,是否有任何可用于多核(非 Autosar)S32K388示例?
    发表于 04-14 08:49

    ETAS如何打破AUTOSAR的固有偏见

    AUTOSAR Classic 常被诟病为复杂且缓慢——但这种看法是否合理?ETAS 首席产品经理 Darren Buttle 在《Automotive World》阐述了 RTA-CAR 如何直
    的头像 发表于 04-11 09:10 608次阅读

    RT-Thread亮相AUTOSAR中国日:国产操作系统与AUTOSAR标准融合的产业化实践

    近日,2026第七届软件定义汽车论坛暨AUTOSAR中国日上,RT-Thread创始人兼睿赛德CEO熊谱翔先生发表题为《赋能SDV新生态:RT-ThreadRTOS与AUTOSAR融合的产业化路径
    的头像 发表于 03-23 19:24 662次阅读
    RT-Thread亮相<b class='flag-5'>AUTOSAR</b>中国日:国产操作系统与<b class='flag-5'>AUTOSAR</b>标准融合的产业化实践

    S9KEAZ64有没有官方的MCAL文件以及有没有全套的AUTOSAR开发工具链?

    使用NXP S9KEAZ64AMLH开发一个AUTOSAR + ISO26262的项目,但是没有搜索到对应的MCAL文件,想知道官方是否有对应的MCAL文件 还有是否有AUTOSAR开发全套工具链,包括SWC+ECU开发,如果有的话,帮忙说明一下,谢谢。
    发表于 03-19 07:12

    【瑞萨RA × Zephyr开发板评测】+模拟IIC实现OLED输出(与硬件IIC输出的失败经验)

    ,进行如下配置,第一步配置时钟(使用内部时钟,尝试使用XTAL,还是使能了对应引脚, 总是停在监测时钟指令上): 第二步设置IIC功能,注意是7位地址模式,地址为0x3C: 生成代码,要注意定义上图
    发表于 01-19 22:23

    RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

    “RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示。从IIC协议的核心原理、FSPI2CMas
    的头像 发表于 01-01 10:04 3965次阅读
    RA MCU众测宝典 | <b class='flag-5'>IIC</b>之【RA2E1】<b class='flag-5'>IIC</b>通信的OLED显示

    光庭信息荣获AUTOSAR中国中心2025年度优秀贡献奖

    12月18日,“AUTOSAR中国中心2025年度奖项颁奖典礼暨答谢晚宴”在上海成功举办。继去年荣获“2024年度特别贡献奖”后,光庭信息凭借在AUTOSAR组织及中国区域发展的持续深耕与突出贡献
    的头像 发表于 12-26 13:43 857次阅读

    通信协议IIC与SPI最全对比分析

    第一点上看,IIC是明显的大赢家。 数据吞吐传输速度 如果应用必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC的不是。SPI没有定义速度限制,一般的实现通常
    发表于 12-10 06:04

    基于hbirdv2-sdk的iic 0.96寸lcd调试

    , 读写数据函数, lcd初始化, lcd显示封装函数 iic.c: 硬件iic接口相关的定义 iic.h: iic硬件IO配置 #defi
    发表于 10-30 06:20

    iic只设置了时钟和数据引脚没有配置那个端口,rtt是怎么知道在那个端口上进行iic通信的?

    用的5.2.0版本配置iic的时钟和数据引脚没有配置端口,系统是怎么判断使用的那个端口的那个引脚开始了通信呢?在rt——thread需要us的延时么?那个大佬解答一下啊,刚接触这个
    发表于 09-26 07:26

    如何实现安全的AUTOSAR通信栈

    。未经保护的通信链路可能面临数据篡改、重放攻击及冒充攻击等风险,危及车辆功能的正确性和用户安全。因此,在AUTOSAR架构建立完备的通信安全机制,已成为行业共识与技术刚需。
    的头像 发表于 09-08 16:43 1532次阅读

    RT-Thread睿赛德正式加入AUTOSAR 组织,成为开发合作伙伴!

    近日,AUTOSAR宣布RT-Thread睿赛德已正式加入AUTOSAR组织成为开发合作伙伴!AUTOSAR组织AUTOSAR组织的本质是一个开发合作伙伴关系。作为全球汽车开放式系统架
    的头像 发表于 09-04 17:07 1591次阅读
    RT-Thread睿赛德正式加入<b class='flag-5'>AUTOSAR</b> 组织,成为开发合作伙伴!

    从手写代码到AUTOSAR工具链:J1939Tp应用篇

    J1939Tp是我学习AUTOSAR CP诸多BSW模块的起点,其分层架构完美体现了AUTOSAR规范的精髓,掌握J1939Tp有助于深入理解通信(COM)相关模块的程序执行过程。
    的头像 发表于 07-10 16:37 5757次阅读
    从手写代码到<b class='flag-5'>AUTOSAR</b>工具链:J1939Tp应用篇

    揭秘RT-Thread上的AUTOSAR CP系统

    本文探讨了RT-Thread与AUTOSARCP的融合,解决车载ECU开发实时性、安全性与灵活性的平衡问题。通过分层安全内核(rt-safetyos/autoos)和工具链整合,兼容AUTOSAR
    的头像 发表于 06-23 20:22 3564次阅读
    揭秘RT-Thread上的<b class='flag-5'>AUTOSAR</b> CP系统

    东软睿驰亮相第16届AUTOSAR开放大会

    此前,5月27日-28日,第16届AUTOSAR开放大会(16th AUTOSAR Open Conference)在比利时布鲁日成功召开,本届大会以“AUTOSAR solutions
    的头像 发表于 06-06 16:07 1833次阅读