首页 > 其他分享 >使用EB配置Spi驱动

使用EB配置Spi驱动

时间:2022-12-28 11:57:10浏览次数:31  
标签:表示 container 传输 配置 EB 选择 Spi Job 驱动

  1. 概述
    1. SPI驱动程序只在主模式和全双工通信模式下工作。驱动程序支持同步和异步通信,支持Level-0, Level-1和Level-2类型配置。
    2. Level等级和同/异步通信,传输seq,传输job,传输channel的配置息息相关。这里的同/异步不是指SPI通信,而是驱动内部数据流的处理模式,是直接同步的由cpu去收发收据,还是由irq和dma组合在后台异步地收发数据的模式。

 

  1. 依赖资源

由上图可知spi驱动模块需要依赖的驱动模块包括Mcu,Port,McalLib,Irq和Dma。

 

Mcu 中的配套设置选择时钟源SEL1,外设核心时钟80MHz

Port 中的配套设置物理4线的输出和复用模式

关键信息: QSPI0,SLSO12中的12, MRSTC中的C,复用模式O4,CS低有效,从机工作在模式3 :Clock空闲高电平(CPOL=1) , 相位LEADING(CPH=1)

 

  1. 配置预览

Spi的配置主要包括SpiDriver,SpiGeneral,SpiHwConfiguration这3个主要的container,下面依次详解。

 

container:SpiGeneral 中包含Spi的一些通用配置,关闭错误侦测,关闭安全模式,失能部分接口API,  设置操作模式为SUPERVISOR, 禁止中断打断传输seq等。

 

SpiChannelBuffersAllowed 用于选择数据buffer是采用IB还是EB的方式,即内部buffer还是外部buffer,取值与实际含义见下图,关于IB和EB的区别请查阅文档。

 

SpiLevelDelivered 用于选择spi工作的Level,Level-0仅支持同步数据传输,Level-1仅支持异步数据传输,Level-2既支持同步数据传输,又支持异步数据传输,取值与实际含义见下图。

 

container:SpiChannel 中创建了2个传输通道,传输通道即可用于同步传输,也可用于异步传输;

SpiChannelType 选择IB,表示使用内部buffer;

SpiDataWidth选择8,表示传输数据为8位宽;

SpiIbNBuffers选择10,表示一个IB的容量是10个SpiDataWidth;如果SpiDataWidth=8,则表示一个IB的容量是10字节;如果SpiDataWidth=32,则表示一个IB的容量是40字节;

SpiEbMaxLength 表示 SpiChannelType选择EBbufer时,单buffer的最大数据量,只有SpiChannelType选择EB时,才需要考虑此值;

SpiTransferStart表示数据传输是MSB/LSB;

SpiDefaultData 表示代码中如果数据buffer指针为NULL时,spi总线上真实发送的数据。

 

container:SpiExternalDevice 中包含了外部连接的从机的配置;

SpiBaudrate 表示主机和从机用640000Hz的波特率通信;

SpiCsIdentifier 选择CHANNEL12 表示使用cs通道12(依据是前面关键信息中SLSO12中的12);

SpiCsPolarity 选择LOW表示cs为low电平时选中从机;

SpiCsSelection选择 CS_VIA_PERIPHERAL_ENGINE表示cs由物理外设驱动,即硬件cs,如果选择CS_VIA_GPIO则表示cs由软件控制gpio去模拟;

SpiDataShiftEdge 选择LEADING 表示空闲时时钟相位为1,选择TRAILING 表示空闲时时钟相位为0;

SpiEnableCs 选择true表示启用片选信号线cs;

SpiHwUnit 选择QSPI0 表示使用物理spi控制器0;

SpiCsGpio 只有在SpiCsSelection选择CS_VIA_GPIO时才需要填充软件模拟cs的gpio的信息;

SpiAutoCalcBaudParameter 选择true表示控制器自动计算波特率设置时需要的各参数的值,建议选择true;

SpiBaudrateParams 只有在SpiAutoCalcBaudParameter选择false时才需要手动填充设置波特率时需要的各参数的值;

SpiShiftClockIdleLevel 选择HIGH表示空闲时时钟极性为1,选择LOW表示空闲时时钟极性为0;

SpiParitySupport 选择UNUSED表示不启用硬件数据流奇偶校验,选择EVEN/ODD则表示启动硬件奇/偶校验;

其余的参数使用默认值即可,更多信息请参阅文档。

生成的配置代码如下:

模式由CPH, CPOL的值决定,模式=CPOL<<1|CPH

 

Sequence, Job, Channel 3者间的关系图:

 

container:SpiJob 中包含了数据传输Job的设置;本例中只创建一个传输Job。

SpiHwUnitSynchronous 选择SYNCHRONOUS表示此Job使用同步模式传输数据,选择ASYNCHRONOUS表示此Job使用异步模式传输数据;

SpiJobEndNotification 用来创建Job传输结束时的回调通知函数,只有SpiHwUnitSynchronous 选择为 ASYNCHRONOUS时该选项才可以配置,同时在代码中用户需要完善此函数的实现;

SpiJobId 由软件自动生成,表示Job的序号,从0开始计;

SpiFrameBaseCS 选择true表示MOSI的数据由CS拉低触发传输,选择false则不受cs触发,这里默认选择false;

SpiJobPriority 用来指定Job的优先级,优先级会影响Job在Sequence队列中的排序位置,默认选择0即可;

SpiDeviceAssignment 用来将此Job分配给真实的物理从机设备,本例中是前面配置的SpiExternalDevice_0;

SpiChannelList 中列出从属于本Job的所有Channel,分别是SpiChannel_0和SpiChannel_1;

 

container:SpiSequence 中包含了数据传输Sequence的设置;本例中只创建一个传输Sequence。

SpiInterruptibleSequence 选择false表示不支持中断打断seq的传输,选择true表示允许中断打断seq的传输,默认选择false禁止中断打断seq的传输,不论同步传输还是异步传输;

SpiSeqEndNotification 用来创建Sequence传输结束时的回调通知函数,只有SpiHwUnitSynchronous 选择为 ASYNCHRONOUS时该选项才可以配置,同时在代码中用户需要完善此函数的实现;

SpiSequenceId 由软件自动生成,表示Sequence的序号,从0开始计;

SpiJobAssignment 用来表示此Sequence下包含的Job,本例中SpiJob_0将被分配到SpiSequence_0下;

 

container:SpiMaxChannel 由软件自动计算用户总共配置的Channel数目,配置完全部的Channel之后,再配置此项;

container:SpiMaxJob 由软件自动计算用户总共配置的Job数目,配置完全部的Job之后,再配置此项;

container:SpiMaxSequence 由软件自动计算用户总共配置的Sequence数目,配置完全部的Sequence之后,再配置此项;

 

container:SpiHwConfiguration 中包含了Spi主机的配置,这里只实现了一个主机配置,即SpiHwConfigurationQspi_0;

SpiHwConfigKernal 用来选择物理控制器,本例中选择QSPI0作为Spi通信主机;

SpiJobQueueLengthQspix 用来指定Job队列支持的最大成员数目,使用默认值2即可;

SpiSleepEnableQspix 选择false表示禁止spi控制在空闲时进入Sleep模式,选择false表示允许spi控制在空闲时进入Sleep模式,使用默认值false禁止进入sleep;

SpiHWPinMRSTQspix 用来指定miso引脚定义,依据前面关键信息中的MRSTC中的C,在这里选择MRST0C_PORT22_PIN6,表示用Port22_Pin6用作miso引脚;

SpiExternalDemux 选择false表示禁止外部器件矩阵复用,选择true表示允许外部器件矩阵复用,因为外部从机只有一个,因此这里选择false禁止外部器件复用;

SpiSLSO0StrobeDelay 表示cs的强制延时值,这里使用默认值即可;

SpiHwDmaConfigurationQspi 用来分配Dma的通道,此项只有在SpiLevelDelivered选择1/2时且SpiHwUnitSynchronous 选择ASYNCHRONOUS时才允许配置,同时需要在DMA和irq中提前完成相关的配置,有关Dma和Irq的配置,请参阅Dma和Irq的配置说明文档;

 

container:SpiPublishedInformation 用来指定芯片支持的硬件spi控制器的数目,使用软件自动计算的默认值6即可;

 

container:CommonPublishedInformatica 中是软件自动生成的版本号默认值,用户无需修改,保持默认即可。

 

上面的配置是同步模式的配置截图,下面提供异步模式区别于同步模式额外新增的配置项截图:

  1. 在dma中创建2个通道,一个数据发送通道,一个数据接收通道,同时数据接收通道中须添加回调函数,发送通道不需要

 

  1. 在SpiHwDmaConfigurationQspi 中添加Dma接收和发送通道的分配

 

  1. 中断优先级的配置,需要遵循以下规则。 DMA.ERR > SPIx.PT > SPIx.ERR > SPIx.UD > SPIx.Tx > SPIx.Rx;同时SPIx.Tx和SPIx.Rx的值等同于二者所使用的DMA的channel号, 同时这两个dma-channel的优先级要保证dam.tx_channel > dma.rx_channel;

 

  1. 接收和发送的中断处理分配给dma

 

物理验证:使用1个Sequence,1个Job,2个Channel 环回模式下同步传输20字节数据的波形图:

 

标签:表示,container,传输,配置,EB,选择,Spi,Job,驱动
From: https://www.cnblogs.com/lance9527/p/17009807.html

相关文章

  • 使用EB配置Dio驱动
    概述DIO驱动程序使用端口外设。端口外设的使用责任由AUTOSAR划分为两个模块。PORT驱动程序配置和设置端口引脚的属性。DIO驱动程序读取或写入端口引脚。DIO驱动程序提......
  • EB软件使用说明文档
    EB软件目录结构:,重点关注demos, doc, plugins 和 workspace这几个文件夹。demos文件夹内包含一些配置的demo工程,你也可以把自己的工程放到这个路径下; doc文件夹内包含EB......
  • webpack5 配置多线程和缓存加快构建速度
    webpack5内置了缓存配置在webpack配置对象下,增加:cache:{type:'filesystem',allowCollectingMemory:true}webpack5可以通过引入 threa......
  • Kettle 连接 MySql 驱动:Driver class 'org.gjt.mm.mysql.Driver' could not be found
    异常:Driverclass'org.gjt.mm.mysql.Driver'couldnotbefound,makesurethe'MySQL'driver(jarfile)isinstalled.org.gjt.mm.mysql.DriverLink1:https://mvnrep......
  • org.springframework.web.bind.ServletRequestDataBinde
    org.springframework.validationClassDataBinder​​java.lang.Object​​org.springframework.validation.DataBinderAllImplementedInterfaces:​​PropertyEditorRe......
  • [PHP]用socket写一个简单的WEB服务器
    今天我就要把我的最新研究成果展示看看,而不玩ARMBIAN了,因为刷了两台S905L3的发现一点挑战都没有从0.2写WEB服务难啊,你需要懂HTTP协议和SOCKET!不过有经验我们很快就可以搭......
  • sb+websocket实例
    1、pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star......
  • 【译】2022 年回顾:Web 性能有哪些新变化?
    原文地址:https://www.debugbear.com/blog/2022-in-web-performance若对文中提到的一些性能参数不太熟悉,可以参考我之前的一篇博文《性能参数和优化手段》。......
  • Apache Iceberg: An Architectural Look Under the Covers【翻译】
    Introduction建立数据湖是为了实现数据的民主化——让越来越多的人、工具和应用程序利用越来越多的数据。实现这一目标所需的一个关键能力是向用户隐藏底层数据结构和物理数......
  • webpack-dev-server
    Tip如果你碰到了问题,请将路由导航至 /webpack-dev-server 将会为你展示服务文件的位置。例如: http://localhost:9000/webpack-dev-server。Tip如果你需要要手动重新......