- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AUTOSARMCALSPI详解
1.?模块简介
SPI驱动程序给那些通过SPI总线连接的设备提供读写服务。常见的设备,比如EEPROM,外挂Watchdog,或其他一些专用集成电路(ASIC)。当然,SPI驱动程序也提供对片上SPI外设的配置及使用。
驱动程序对功能和配置都划分了多个等级以达到高扩展性及灵活性。比如功能方面,划分为3个等级。根据不同等级可配置为同步或异步。
当然还抽象了很多其他概念,比如Sequence, Job, Channel等。重要概念/关键点请见下图:
2. 模块限制
只支持Master模式。
只支持全双工模式。
LEVEL 2 是为那些需要单独提供至少两路SPI总线的芯片而指定的。否则,使用这种级别的功能没有意义。
外设时钟初始化及分频由MCU模块负责
如果有寄存器需要和其他外设共享,这种寄存器由MCU负责。
3. 主要概念:Sequence/Job/Channel
首先需要说明一下这里的Channel是软件层面的,与硬件的物理通道/Channel没任何关系,也没有进行任何绑定。软件层面的这个Channel只是对BUFF做一些配置。
Job是和外设绑定的。所以一个Channel可以同时属于多个Job,如上CH2及CH5。CH2和CH5的区别在于前者是用于不同外设,后者用同一外设。个人不推荐这么使用,因为一旦管理不好,很容易造成buff里面的数据混乱。一个Job也同样可以同时属于多个Sequence,如上Job0 。
一个Job下面可以有多个Channel,如上Job1, Job2,Job3;且应至少有一个Channel,否则没意义,如上Job5是不允许的。这种情况通常是这个Job/Seq有多个用户使用,针对每个用户分配自己独立的Channel。
同样,一个Sequence下面可以有多个Job,如上Seq3;应至少有一个Job,否则 没意义,如上Seq2是不允许的。
同一个Sequence下面的多个Job,他们拥有相同的优先级。
一个外设可有多个Job绑定。
上图可以发现,一个Sequence下面可以有不同外设(总线)的Job。
传输是以Sequence为单位,只能操作Sequence。接收是具体到某个Channel。获取状态或者回调,Job及Sequence都可以(Level1, Level2)。
4. Sequence/Job/Channel发送时序
如上图所示,发送任务需要等Sequence下面的所有Job及所有Channel都发送完成后,总线才空闲(释放)。
如果多个Job共用一个Channel(Sequence也一样),那么在传输过程中用户需要保证不调用读/写相关函数,否则数据一致性无法保证(数据混乱)。
在传输过程中,读/写函数自己是无法保证数据的完整性的。
允许同时发起多个Sequence传输请求。比如当一个Seq正在传输过程中,允许发起另外的Seq传输请求,但相同的Seq不能同时发起多次。驱动程序会根据当前情况选择接受或拒绝。比如新的Seq与原Seq有共享的Job,这种情况不会接受请求以防止冲突等。
Sequence传输请求是可以被取消的(Spi_Cancel),取消这个操作以Job为原子单位进行处理。取消之后还是会调用回调函数通知用户(如果使能了)。需要注意的是,取消操作是否会对外设造成损坏或其他未定义行为需要用户自己把控,驱动程序是不负责的。
Sequence下面可以包含多个Job,每个Job传输完成后会根据优先级策略(请见后文)重新进行调度。Polling模式下调度是靠用户周期调用Spi_MainFunction 函数来实现的。
5. MCAL SPI模式分类
√: support/available x: not support/unavailable IB/EB: 请见后文
LEVEL 0:提供一组简化的服务,只处理简单的同步传输。对于包含简单SPI网络的ECU来说,这种情况经常发生,即便对于使用高速外部设备的ECU来说也是如此。
同步传输意味着一旦调用了传输服务函数,在该传输请求完成之前,程序将会一直被阻塞(一个好的代码实现,通常也会有超时监控机制,超时后也会释放CPU)。
LEVEL 1:提供一组简化的服务,只处理异步传输。对于那些使用SPI且定义了不同优先级的功能来说,异步传输经常被用到。还有一些低速外设也同样适合该异步模式。
异步传输意味着当传输正在进行时,调用传输服务的用户不会被阻塞。驱动程序可以在传输结束时通知用户(可由用户进行配置)。异步传输模式又可以分为通过轮询或中断来实现。
LEVEL 2:前面两种的组合。包含全部功能。可满足不同速率,不同优先级等复杂需求场景。是为那些需要单独提供至少两路SPI总线的芯片而指定的。否则,使用这种级别的功能没有意义。
如果配置
文档评论(0)