当前位置: 首页 > news >正文

Davinci Configurator之SPI模块配置详解

一、通道、任务、序列定义Autosar MCAL对SPI总线和控制器的行为做了如下一些定义。通道(Channel)数据在软件上是以SPI通道为基本传输单元进行通信的在同一个通道中传输配置参数数据长度大小端源地址目的地址等数据属性是相同的。任务(Job)一个任务可以包含多个通道这些通道必须使用相同的片选信号一个SPI任务通常是与一个SPI器件通信也即一个任务关联一个外设器件。一个任务也即是一帧(frame)。任务不可再分一个任务在执行过程中不可被其他任务打断。一个任务可以被设置成同步或者异步。序列(Sequence)一个序列包含多个连续的任务这些任务可根据优先级调整时序。一个序列是否可被打断可通过配置进行设置。也就是说一个SPI上挂了多个外设那么调用一次sequence可以根据优先级依次对三个外设进行通信。注意一个序列中包含的任务必须在同一个SPI上否则在进行配置的时候会报错。由上图可以看到Sequence可以包含多个CS不同的Job一个Job可以包含多个CS相同的Channel在一个Job(也即一个frame)传输过程中cs引脚持续拉低Job传输完成后cs被拉高(注意cs也可以设置为以Channel为单位拉低但是一般不这么做)。二、RH850中SPI硬件结构二、配置详解前言RH850有4个SPI硬件单元每个SPI单元具有一个通道接口、8个片选信号4个波特率设置寄存器CSIHnBRSxx0 to 32.1 SpiDriversClock Frequency Ref Immediate Value指的是SPI的时钟频率RH850中定义为CLKP_C2.1.1SpiChannels1ChannelIdChannelId 是一个由配置工具自动生成的‌唯一通道编号‌用于在软件层面唯一标识一个SPI通信通道。它并非直接对应物理引脚或硬件寄存器地址而是一个逻辑标识符。2Channel TypeIB指的是 Mcal 代码中已经定义了数据收发缓存用户可以读写该缓存数据字长在 Treses 的 Mcal 配置界面中设置8190在代码中不可更改EB为 Spi 通信数据缓存模式。EB 指的是用户需要自行 定义收发数据缓存数据字长用户可通过函数形参进行设置。NOTE也就是说如果在Spi_PBcfg.c里会有发送和接收的数组如果Channel选择的是IB模式那么本Channel的发送和接收的数据都在Spi_PBcfg.c里的那些数组。IB模式的Channel通过Spi_ReadIB和Spi_WriteIB来对Spi_PBcfg.c里的那些数组进行读写。如果Channel选择的是EB模式那么需要调用Spi_SetupEB来赋予本Channel的发送接收数据源地址EB模式的Channel的发送接收数组就不是Spi_PBcfg.c里的数组了。IB模式的数据缓冲区大小和地址在Spi_PBcfg.c里就配置好了属于静态配置EB模式的数据缓冲区则属于动态配置大小和地址可灵活定制。SPI_CHANNEL_BUFFERS_ALLOWED宏定义如果是0那么只允许有IB数据缓冲区如果是1那么只允许有EB数据缓冲区如果是2则允许IB和EB数据缓冲区都有。3Data Width数据长度选择NOTE:RH850手册规定传输数据长度由寄存器CSIHnDLSx配置当传输数据长度超过16位时需启动EDL扩展数据长度功能对于传输16位的块EDL必须被设置为1在这种情况下无论CSIHnDLSx如何设置写入CSIHnTxOW的数据均以16位的数据长度发送4Default Data默认填充数据在没有配置缓冲区的时候如果启动传输则会传输默认的填充数据5Eb Max Length当 SPI 通道类型配置为 EB 时该通道支持的最大数据元素通常为字节或字数量该参数‌仅在 SpiChannelType EB 时生效‌。若使用内部缓冲区IB则此参数无效。6Ib NbuffersIb NBuffers‌ 指的是为‌内部缓冲区Internal Buffer, IB模式‌的SPI通道配置的‌缓冲区数量‌。这个参数仅在SPI通道被配置为 ‌IB模式‌ 时才有效和相关。这个参数定义了为该SPI通道分配的‌独立IB缓冲区的个数‌。每个缓冲区的大小由 SpiDataWidth数据宽度和通道的配置决定。设置 Ib NBuffers 可以精确控制为该通道分配的内存大小。例如如果 SpiDataWidth 是8位1字节而 Ib NBuffers 设置为4那么该通道将分配4个字节的内存用于缓冲数据。使用单个缓冲区Ib NBuffers 1可以简化同步控制逻辑因为无需管理复杂的队列适用于需要精确时间点采样或触发的场景。缓冲区的总大小会根据 SpiDataWidth 进行向上取整例如12位数据会被取整为16位即2字节并进行4字节对齐以满足硬件和性能要求。‌NOTE:设置单个缓冲区的作用和优势资源占用减少通过限定只使用一个缓冲区可以有效降低硬件或软件层面所需的内存资源开销。同步控制简单化由于只有一个缓冲区参与工作在某些应用场景下能够更容易实现精确的时间点采样或者特定条件下的触发机制而无需复杂的队列管理和调度逻辑。7Transfer Start选择MSB传输还是LSB传输在RH850手册中此项配置由CSIHnDIRx寄存器决定2.1.2 SpiExternalDevices1Baudrate8000000该参数为通信波特率。该参数不用于实现因为该参数配置的值不能直接映射到寄存器值而是设置Baudrate Configuration2Baudrate configuration10波特率计算CLKP_C/(2^α * k * 2)。这里k值是为该参数选择的值对应手册中的CSIHnBRSx取值0-4095为0时表示时钟停止。α是input clock select参数设置的值0-6。寄存器说明CSIHnBRSy[11:0]0:BRG Stopped k:CLKP_C/(2^α * k * 2)3Baudrate configuration Low Power10该参数定义了 SPI 在进入低功耗模式时其串行时钟SCLK的分频系数即波特率分割率从而降低通信速率以减少功耗。‌适用场景‌通常用于系统进入睡眠、待机或节能状态时仍需维持 SPI 通信但对速度要求不高的场合。波特率计算CLKP_C/(2^α * k * 2)CLKP_C‌SPI 模块的输入时钟频率由 MCU 提供α由 SpiInputClockSelectLowPower 参数设定取值范围为 0–6k‌即 ‌“Baudrate configuration Low Power”‌ 参数的值对应硬件寄存器 CSIHnBRSxx0 to 3取值范围为 0–40954Baudrate Register SelectCSIH_BAUDRATE_REGISTER_0Baudrate Register Select‌波特率寄存器选择是一个用于指定SPI硬件模块中具体使用哪个波特率分频寄存器的参数。这个参数的设置直接关系到SPI通信时钟频率的最终计算方式。其核心含义如下作用‌它选择用于计算实际SPI波特率的分频寄存器。在许多MCU如RH850、AURIX中SPI控制器内部通常有多个如4个独立的波特率分频寄存器例如CSIHnBRS0、CSIHnBRS1、CSIHnBRS2、CSIHnBRS3。Baudrate Register Select允许你从这些寄存器中选择一个作为当前SPI通道的波特率源。与Baudrate Configuration的关系‌Baudrate Register Select本身不直接设置波特率数值而是‌指向‌一个寄存器。实际的波特率分频系数k值是在另一个参数 ‌Baudrate Configuration‌ 中设置的。最终的SPI时钟频率计算公式为CLKP_C / (2^α * k * 2)其中k就是Baudrate Configuration中设置的值α是输入时钟选择参数而Baudrate Register Select决定了这个k值是被写入哪个硬件寄存器来生效。简而言之Baudrate Register Select就是告诉SPI硬件“你用哪个编号的分频寄存器BRS0, BRS1, BRS2, 或 BRS3里的数值来计算我的通信速度”。而具体的分频数值则由Baudrate Configuration参数提供对应手册中的CSIHnCFGx.CSIHnBRSSx[1:0]寄存器说明CSIHnBRSSx[1:0]00:根据CSIHnBRS0设置波特率01:根据CSIHnBRS1设置波特率10:根据CSIHnBRS2设置波特率11:根据CSIHnBRS3设置波特率5Cs Hold TimingHOLD_TIME_1CS Hold Timing‌片选保持时间是指‌芯片选择信号CS在低电平状态或高电平取决于极性必须保持的最短时间‌其目的是确保在CS信号从激活状态切换到非激活状态之前SPI从设备有足够的时间完成最后一位数据的采样和内部处理从而避免数据丢失或传输错误。功能作用‌在一次SPI数据传输的最后一个时钟周期结束后CS信号不会立即变回非激活状态而是会额外保持一个由Cs Hold Timing参数设定的最小时间。这段时间确保了从设备的内部状态机能够稳定完成数据锁存尤其是在高速通信或从设备响应较慢的场景下。‌ 配置影响‌如果该值设置过短可能导致从设备尚未完成数据处理CS就已拉高从而引发通信错误若设置过长则会增加整体通信延迟降低系统效率。‌‌ 硬件对应‌对应手册中的CSIHnCFGx.CSIHnHDX[3:0]Thold改变CS前CS激活电平的保持时间‌‌ ‌配置建议‌该值需根据所连接的SPI从设备如传感器、EEPROM等的数据手册中规定的“CS保持时间”t_HOLD来设定并留有适当裕量以确保在不同温度、电压条件下的可靠性‌。‌‌‌ ‌HOLD_TIME_1‌ 是DaVinci配置工具中预设的枚举值之一通常代表‌硬件支持的最短保持周期‌。具体时长取决于所选的MCU型号及其SPI外设的时钟频率。例如在某些MCU上HOLD_TIME_1可能对应1个SCLK周期或几个系统时钟周期具体数值需查阅对应MCU的参考手册或DaVinci生成的配置代码。6Cs IdentifierNULLCs Identifier‌Chip Select Identifier片选标识符是一个关键配置参数用于‌逻辑标识某个 SPI 从设备Slave所使用的片选信号‌。逻辑标识‌CsIdentifier 并不是直接对应物理 GPIO 引脚号而是一个‌逻辑编号‌用于在软件层区分不同的 SPI 从设备。映射关系‌该标识符由配置工具如 DaVinci在生成代码时映射到具体的硬件片选信号如外设自带 CS 引脚或通过 GPIO 模拟的 CS 信号。作用范围‌通常在 SpiExternalDevice 或 SpiJob 配置中使用表示“这个 Job 或外部设备使用哪个片选信号”。典型应用场景当一个 SPI 主机连接多个从设备如 Flash、传感器、ADC 等时每个从设备需分配唯一的 CsIdentifier在 Job 配置中指定 CsIdentifier 可确保在传输过程中正确激活对应从设备的片选信号。是否使用外设自带 CS‌若勾选“使用外设自带片选信号”则 CsIdentifier 对应硬件模块的 CS 通道如 QSPI 的 CS0、CS1否则需通过 GPIO 模拟此时 CsIdentifier 用于查找 GPIO 控制函数。‌电平配置‌通常配合 SpiCsPolarity如低电平有效使用确保片选信号正确激活。‌配置位置‌在 DaVinci Configurator 中一般位于 ‌SpiExternalDevice‌ 或 ‌SpiJob‌ 的属性设置中SPI 的 CsIdentifier 配置为 NULL‌ 的含义如下CsIdentifier 用于标识 SPI 通信中使用的片选Chip Select, CS信号‌通常对应一个具体的硬件引脚或片选通道。当将其配置为 ‌NULL‌ 时表示 ‌不使用硬件片选信号‌即 SPI 通信将‌不通过硬件 CS 引脚来选中从设备‌。这种配置适用于以下场景使用‌软件模拟片选‌由用户代码手动控制 GPIO系统中‌仅有一个从设备‌且该设备的 CS 引脚被外部电路永久拉低始终使能硬件设计未使用独立 CS 引脚‌或 MCU 的 SPI 模块不支持多 CS 输出。注意事项即使 CsIdentifier NULL‌SPI 的 SCLK、MOSI、MISO 仍可正常工作‌只是失去了对多个从设备的硬件选中能力。在多从设备系统中‌不建议设置为 NULL‌否则可能导致总线冲突。此配置需与‌硬件设计和应用逻辑保持一致‌否则可能引发通信失败。相关配置层级关系参考 AUTOSAR SPI 架构‌Channel‌最小传输单元可关联一个 CsIdentifierJob‌由多个相同 CS 的 Channel 组成原子执行。Sequence‌可包含多个不同 CS 的 Job但若某 Job 的 CsIdentifier NULL则该 Job 不会触发硬件 CS 切换。7Cs Idle Enforcement使能SPI 的 Cs Idle Enforcement 参数‌用于控制片选信号Chip Select, CS在连续传输之间的空闲行为‌对应RH850手册中的CSIHnCFG.CSIHnIDLx具体含义如下‌定义与作用Cs Idle Enforcement‌ 是一个布尔型配置项True/False仅对支持该特性的 SPI 硬件单元如 RH850 的 CSIH有效它决定了‌当两个 SPI 传输Job连续发生时CS 信号是否必须在中间拉高进入非激活状态一段时间‌。配置行为详解Cs Idle Enforcement True‌无论前后两次传输是否使用相同的 CS 信号‌都‌强制插入一个 CS 非激活空闲时间段‌。适用于对 CS 时序要求严格的外设如某些 EEPROM 或 ADC确保每次通信完全独立 ‌Cs Idle Enforcement False‌仅当前后两次传输使用不同的 CS 信号时‌才插入 CS 空闲时间若使用相同的 CS 信号‌则‌CS 保持低电平不释放‌实现连续、无间断通信 ‌注意在某些硬件如 RH850上此模式可能产生极短毛刺约 20ns需结合软件延迟使用 ‌‌典型应用场景传感器轮询‌多个设备共用总线每次切换设备时需释放 CS → 设置为 True‌Flash 编程‌连续发送指令、地址、数据且始终选同一芯片 → 设置为 False 以提高效率8Cs Idle TimingIDLE_TIME_3_POINT_5IDLE_TIME_3_POINT_5表示3.5个传输时钟周期‌Cs Idle Timing 的含义作用‌该参数用于设定在两次连续 SPI 传输之间‌若 ‌CS 保持激活状态‌即未释放则在数据传输结束后与下一次传输开始前‌插入的空闲延迟时间适用条件‌仅当启用 Cs Idle Enforcement即设置为 True时生效仅对支持 CSIH 硬件的 MCU 有效如某些 Infineon AURIX 或 NXP S32K 系列当连续两个Job使用相同的CS信号‌ 时此参数决定是否以及如何插入空闲间隔。‌寄存器映射对应底层硬件寄存器 CSIHnCFGx.CSIHnIDx[2:0]表示一个 3 位字段可配置 0~7 个时钟周期的延迟 ‌‌典型应用场景‌从设备要求‌某些 SPI 从设备如传感器、Flash在连续写入时要求 CS 保持激活但需在帧间插入最小空闲时间以稳定内部状态。避免干扰‌防止高速连续传输导致从设备无法及时响应或采样错误。‌配置建议若从设备数据手册未明确要求 CS 间隔则通常可设为 ‌0‌即无额外延迟若需满足从设备的 ‌t_IDLE‌CS 空闲时间要求则根据系统时钟和 SPI 波特率计算对应周期数在 DaVinci Configurator 中该参数通常以 ‌“时钟周期数”‌ 为单位输入注意该参数 ‌不影响‌ CS 在 Job 开始前的 Setup Time 或 Job 结束后的 Hold Time仅作用于 ‌同 CS 连续 Job 之间的空闲段‌对应手册中的CSIHnCFGx.CSIHnIDx[2:0]9Cs Inactive After Last Data使能该参数控制 SPI 片选信号Chip Select, CS在一次完整数据传输即一个 Job 或 Sequence结束后是否自动释放拉高若为低电平有效 CS。‌配置值说明‌true‌在最后一个数据位传输完成后‌自动将 CS 信号置为非激活状态‌通常为高电平若 CS 为低电平有效。false‌CS 信号‌保持激活状态‌直到下一个 Job 或手动控制才释放。典型应用场景当与多个从设备通信时若希望每个 Job 自动完成 CS 切换应设为 true避免 CS 信号干扰其他设备。若需连续发送多个数据块如 DMA 传输且保持同一从设备选中则可设为 false由软件统一控制 CS 释放时机。对应手册中的CSIHnCTL1.CSIHnCSRICs Inactive After Last Data和Cs Idle Enforcement配置建议总结场景Cs Inactive After Last DataCs Idle Enforcement单次独立传输从设备要求快速释放 CStruetrue低速或 false 软件延迟高速连续多通道传输CS 不应释放falsefalse使用 RH850 EDL 模式16 位数据注意 CS Hold 时间需补偿 30–40% 延长true 以避免时序违规 ‌10Cs Inter Data DelayINTER_DATA_TIME_0_POINT_5Cs Inter Data Delay‌片选间数据延迟是指‌在同一个 SPI 任务Job中连续两个数据传输之间片选信号CS保持激活状态的时间间隔‌。对应手册中的CSIHnCFGx.CSIHnINx[3:0]‌应用场景‌主要用于‌多通道Multi-ChannelSPI 传输‌即一个 Job 包含多个通道且这些通道共享同一个片选信号。作用‌确保在连续发送多个数据块如多个寄存器或帧时‌片选信号不会在中间被释放‌而是保持激活并在两个数据块之间插入一个可配置的延迟。目的‌满足某些外设对‌片选保持时间‌的要求避免因片选频繁拉高/拉低导致从设备无法正确处理连续数据提供足够时间用于从设备内部处理如 ADC 转换、寄存器写入等。11Cs PolarityLOW此参数定义芯片选择的有效极性。HIGH片选高电平有效LOW片选低电平有效对应手册中的CSIHnCTL1.CSIHnCSLx(x0 to 7)12Cs SelectionCS_VIA_PERIPHERAL_ENGINE当芯片选择处理被启用时(参见SpiEnableCs)这个参数指定芯片选择是由外设硬件引擎自动处理还是通过Spi驱动程序的通用IO处理。CS_VIA_PERIPHERAL_ENGINE通过外设硬件引擎选择芯片。CS_VIA_GPIO通过Spi驱动程序GPIO选择芯片选择 CS_VIA_PERIPHERAL_ENGINE表示cs由物理外设驱动即硬件cs,在SpiCsPin处选择Port的配置如果选择CS_VIA_GPIO则表示cs由软件控制gpio去模拟,在SpiCsViaGpio处选择Dio的配置13Cs Setup TimeSETUP_TIME_0_POINT_5从片选信号CS被激活通常拉低到第一个 SPI 时钟边沿SCLK出现之间的时间间隔‌。对应手册中的CSIHnCFGx.CSIHnSPx[3:0]目的‌确保从设备如传感器、Flash 等在接收到有效的片选信号后有足够的时间完成内部状态准备如唤醒、寄存器配置等以便正确采样后续的数据。‌典型应用场景‌某些慢速外设需要几十到几百纳秒的“前导延迟”Lead Delay来响应片选激活此参数即用于满足该要求。14Data Shift EdgeLEADING数据移位边沿TRAILING后沿此处是下降沿前提是时钟默认电平为低电平LEADING前沿此处是上升沿前提是时钟默认电平为低电平此参数定义SPI数据移位边缘。数据可以在移位时钟的前沿或后沿上移位对于一个时钟周期内有两个edge,分别称为(1)Leading edge前一个边沿第一个边沿对于开始电压是1那么就是1变成0的时候对于开始电压是0那么就是0变成1的时候(2)Trailing edge后一个边沿第二个边沿对于开始电压是1那么就是0变成1的时候即在第一次1变成0之后才可能有后面的0变成1对于开始电压是0那么就是1变成0的时候在SPI协议中有类似的定义为CPHACKPHA (Clock Phase) CPHA PHA Phase 时钟相位不太一样的是SpiDataShiftEdge是指的数据传输CPHA指的是数据采样。不过一个确定后另外一个边沿也就跟着确定了15Enable Cs使能Enable CsEnable Chip Select用于启用或禁用 SPI 外设对片选Chip Select, CS信号的自动硬件管理功能‌。当该参数被 ‌启用勾选‌ 时SPI 硬件外设会‌自动控制 CS 引脚‌的电平拉低/拉高在通信开始前自动激活从设备通信结束后自动释放。此时需配合 SpiCsSelection 配置为 CS_VIA_PERIPHERAL_ENGINE表示由 SPI 外设硬件引擎处理 CS。当该参数被 ‌禁用不勾选‌ 时CS 信号‌不由 SPI 硬件自动控制‌而是需通过 ‌通用 GPIOGPIO手动模拟‌由软件在通信前后显式拉低/拉高 CS。注意若使用外设自带 CS 引脚但未启用 Enable Cs可能导致通信失败因为 CS 不会被正确激活。典型配置场景‌ 多从机系统‌每个从设备需独立 CS启用 Enable Cs 可让硬件自动管理不同 Job 的 CS 信号。CS 信号被其他外设占用‌若 SPI 外设的 CS 引脚已被占用可禁用 Enable Cs改用 GPIO 模拟 CS。‌ 相关配置项联动Enable Cs 与以下参数紧密关联SpiCsSelection‌指定 CS 由外设硬件CS_VIA_PERIPHERAL_ENGINE还是 GPIOCS_VIA_PORT控制。SpiCsIdentifier‌定义所用 CS 引脚的标识符如 SPI_CS_P22_2。SpiCsPolarity‌设置 CS 激活电平通常为低电平有效‌16Enable Handshake禁用‌Enable Handshake‌ 的中文含义是“启用握手信号”。该配置用于控制是否在 SPI 通信过程中启用‌硬件或软件层面的握手同步机制‌以确保主从设备之间的数据传输在双方都准备好时才进行。‌‌启用Enable‌SPI 传输会等待从设备或外部逻辑发出“就绪”信号如通过专用引脚或状态标志后才开始数据发送/接收避免因时序不匹配导致数据丢失。‌‌禁用Disable‌SPI 严格按照配置的时钟和时序主动发起传输不等待外部确认适用于高速、确定性高的通信场景。典型应用场景‌慢速从设备‌如某些 ADC、传感器等响应较慢需通过握手信号确认其已准备好接收/发送数据。异步系统间通信‌当主从设备时钟不同步或存在不确定延迟时握手可提升可靠性。多设备共享总线‌防止多个从设备同时响应造成冲突。若不确定是否启用可参考以下原则从设备数据手册明确要求等待 READY/BUSY 信号‌ → ‌启用通信速率高、时序严格、无外部依赖‌ → ‌禁用‌减少延迟17FIFO Time Out0FIFO Time Out‌ 用于‌防止 SPI 通信因 FIFO先进先出缓冲区异常而长时间阻塞‌。对应手册中的CSIHnMCTL0.CSIHnT0[4:0]含义说明‌FIFO Time Out‌ 定义了 SPI 发送或接收操作在 FIFO 中等待数据传输完成的最大时间限制。如果在该超时时间内FIFO 未被正确清空发送或填满接收SPI 驱动将‌触发超时错误‌并可能中止当前传输、报告错误或进入恢复状态。该机制用于提升系统鲁棒性避免因硬件故障、总线冲突或从机无响应导致的死锁。典型应用场景SPI 主机发送数据时若从机未正确采样或总线被拉低导致数据滞留在发送 FIFO 中。SPI 接收数据时若从机未按时返回数据接收 FIFO 无法填满。在多任务或中断环境中确保 SPI 传输不会无限期占用资源。配置建议基于常见实践虽然公开资料未明确给出 DaVinci 工具中该参数的默认值或单位但结合 AUTOSAR MCAL SPI 通用设计原则超时值通常以 ‌微秒μs‌ 或 ‌SPI 时钟周期数‌ 为单位。应根据 ‌实际通信速率SCK 频率‌ 和 ‌预期最大传输数据量‌ 设置留有适当余量。例如若传输 8 字节、SCK 为 1 MHz每字节 8 μs则最小超时应大于 64 μs建议设为 100–200 μs 以容错。18Hw UnitCSIH2用于选择该 SPI 设备使用哪个 SPI 控制器19Input Clock SelectCLKP_C该参数包含PreScaler Selection位设置为主模式时计算波特率时需要考虑以下参数波特率计算CLKP_C/(2^m * k * 2)。这里的m值是为该参数选择的值k是Baudrate configuration参数设置的值。对应手册中的CSIHnCTL2.CSIHnPRS[2:0]将 Input Clock Select 设置为 CLKP_C意味着 SPI 模块的时钟基准直接使用 CLKP_C 定义的频率‌该值通常在芯片手册或 MCAL 配置文档中有明确定义20Input Clock Select Low PowerCLKP_C该参数包含低功耗模式下的PreScaler Selection位设置为主模式时计算波特率时需要考虑以下参数波特率计算CLKP_C/(2^m * k * 2)。这里的m值是为该参数选择的值k是Baudrate configuration low power参数设置的值。对应手册中的CSIHnCTL2.CSIHnPRS[2:0]将 Input Clock Select 设置为 CLKP_C意味着 SPI 模块的时钟基准直接使用 CLKP_C 定义的频率‌该值通常在芯片手册或 MCAL 配置文档中有明确定义21Master Mode使能Master Mode主模式‌ 是指 SPI 控制器作为通信的‌主导方‌负责生成时钟信号SCLK并控制通信时序而连接的外部设备如传感器、存储器等则作为从设备Slave被动响应。根据权威公开资料AUTOSAR SPI 驱动仅支持 ‌Master 模式‌不支持 Slave 模式 ‌这意味着‌SPI 主机Master‌产生 SCLK 时钟信号通过片选信号CS/SLSO选择特定从设备主动发起数据传输全双工在数据阶段同时发送MTSR和接收MRST数据从设备Slave‌无时钟生成能力仅在接收到 SCLK 时响应通过 MISO对应 MRST回传数据片选信号由主机控制在 DaVinci Configurator 中配置 SPI 时虽然界面可能不直接显示“Master Mode”选项但‌所有 SPI 通道默认工作在主模式‌因为 AUTOSAR 标准未定义 SPI 从设备驱动 ‌22Parity SelectionODD_PARITY在 SPI 通信中若启用奇偶校验发送方会在每个数据帧如 8 位或 16 位数据后附加一个‌奇偶校验位‌接收方根据该位判断数据是否出错。NO_PARITY在发送时不发送奇偶校验在接收时不期望奇偶校验PARITY_AT_ZERO在传输时添加固定0的奇偶校验位在接收时接收但不判断奇偶校验位ODD_PARITY在传输时添加奇校验在接收时接收奇校验位EVEN_PARITY在传输时添加偶校验在接收时接收偶校验位对应手册中的CSIHnCFG.CSIHnPSx[1:0]23Shift Clock Idle LevelHIGH移位时钟空闲电平HIGH移位时钟空闲电平高LOW移位时钟空闲电平低对应手册中的CSIHnCTL1.CSIHnCKR还与CSIHnCFG.CSIHnCKPx24Time Clk2 Cs0时钟和芯片选择之间的定时(以秒为单位)-该参数允许使用从0到0.0001秒的值范围BSW-SPI软件使用的实际配置值由生成工具计算得到此参数仅在SpiCsSelection配置为CS_VIA_GPIO时有效。用于传输开始时的CS设置时间用于传输结束时的CS保持时间。当CSIH硬件配置SpiCsSelection为CS_VIA_PERIPHERAL_ENGINE时请使用SpiCsSetupTime和SpiCsHoldTiming分别配置CS设置时间和CS保持时间2.1.3 SpiJobs1Short Name自定义2Device Assignment/ActiveEcuC/Spi/SpiDriver/SpiExternalDevices的名字配置对应的Spi设备在SpiExternalDevice中定义3Hw Unit SynchronousSYNCHRONOUS同步模式Synchronous‌通信过程是‌阻塞式‌的函数会一直等待直到当前 Job 或 Sequence 完成才返回。适用于对实时性要求高、需确保数据立即发送/接收完成的场景。通常用于单次、简单的 SPI 通信任务。异步模式Asynchronous‌通信是非阻塞的调用 Spi_AsyncTransmit() 后立即返回实际传输在后台进行通过中断或 DMA。适用于多任务、高并发或需要持续传输的场景。设置为 SYNCHRONOUS 时系统会使用 ‌内部缓冲区IB‌ 进行数据暂存限制每个通道通常只用 ‌单个缓冲区‌Ib NBuffers 1以简化同步控制逻辑适用于需要‌精确时间点采样或触发‌的应用 ‌典型应用场景传感器数据采集如 ADC 通过 SPI 读取配置外设寄存器如 Flash、RF 模块实时控制环路中需要确保命令立即生效3Job End NotificationNULLob End Notification‌ 是一个‌回调函数Callback‌用于在SPI的 ‌Job 执行完成后‌由底层驱动‌异步通知上层模块‌任务已结束。Job‌在 AUTOSAR 的通信模块如 SPI、Fls中Job 是一个原子操作单元通常包含一组通道Channel或扇区操作不能被其他 Job 中断。End Notification‌当该 Job 完成无论成功或失败时底层驱动会自动调用预先配置的 ‌Notification 函数‌通知上层“任务已完成”。应用场景SPI 通信‌异步传输完成后调用 SpiJobEndNotification() 读取接收数据 ‌Flash 操作‌Fls 模块完成擦除/写入后通过 FlsJobEndNotification 通知 Fee 或 NvM 模块 ‌注意若配置了该 Notification则必须在代码中实现对应的函数体如 void FlsJobEndNotification(void)否则可能导致链接错误或逻辑异常。相关配置项以 SPI 为例SpiJobEndNotification指向 Job 结束回调函数的指针 ‌SpiJobId关联的 Job 标识符通常自动生成SpiJobPriorityJob 优先级0 最低3 最高‌当该配置被设置为 ‌NULL‌ 时表示‌不启用作业结束通知机制‌作业完成后不会调用任何回调函数‌系统将‌忽略作业完成事件‌不执行额外处理。4Job Id2配置Job Id配置Job Id会生成对应的宏定义5Job Priority3配置Job优先级0为最低优先级3为最高优先级Job Priority作业优先级‌ 是用于控制多个 SPI 通信任务Job执行顺序的关键参数。‌Job Priority 的含义‌Job‌代表一次完整的 SPI 通信操作通常对应一个外设如 Flash、传感器等包含一个或多个 Channel数据通道。Job Priority‌定义该 Job 在同一 Sequence序列中相对于其他 Job 的‌调度优先级‌。注意Job 优先级‌仅影响同一 Sequence 内多个 Job 的执行顺序‌‌不能抢占正在运行的 Job‌因为 Job 是原子操作一旦开始就必须完整执行完毕6Port Pin SelectCSS1使用 ‌DaVinci Configurator‌ 配置 SPI 模块时将 ‌Port Pin Select 设置为 CSS1‌是指 ‌将 SPI 片选信号Chip Select, CS绑定到硬件控制器的第 1 个片选输出引脚CSS1CSS‌ 是 “Chip Select Signal” 的缩写用于在多从机 SPI 系统中选中特定从设备。CSS1‌ 表示该 SPI 控制器的 ‌第 1 个片选通道‌通常对应硬件上的一个专用 GPIO 或复用功能引脚在 DaVinci Configurator 中配置 Port Pin Select CSS1意味着该 SPI 通信任务Job或设备Device将使用 ‌CSS1‌ 作为其片选信号当该 Job/Device 被激活时MCAL 层会自动控制 ‌CSS1 对应的物理引脚拉低通常为低电平有效‌以选中目标从设备通信结束后CSS1 会被拉高释放从设备。2.1.4 SpiMemoryMode1Hw Unit SelectionCSIH2选择对应的SPI硬件单元CSIH0~32Memory Mode SelectionDIRECT_ACCESS_MODE此参数定义内存模式选择DIRECT_ACCESS_MODE选择直接访问内存模式。FIFO_MODE选择FIFO缓存模式DUAL_BUFFER_MODE选择双缓冲模式Tx_CNLY_MODE选择Transmit-Only Buffer Memory Mode对应手册中的CSIHnMCTL0.CSIHnMMS及CSIHnMCTL0。CSIHnMBS[1:0]DIRECT_ACCESS_MODE‌ 是 SPI 控制器的一种硬件访问模式允许软件‌直接通过内存地址映射的方式访问 SPI 硬件寄存器‌而无需经过额外的缓冲或抽象层如 FIFO 或双缓冲。在该模式下数据传输通常采用‌轮询polling或同步方式‌CPU 主动读写 SPI 控制器的寄存器来完成数据收发。适用于‌简单、低延迟、小数据量‌的通信场景例如配置传感器寄存器或读取状态信息。‌与其他模式的对比模式特点适用场景‌DIRECT_ACCESS_MODE‌直接访问CPU 直接读写寄存器无中间缓冲同步传输为主小数据、实时性要求高、资源受限‌FIFO_MODE使用先进先出缓冲区支持异步传输可结合 DMA中大数据量减少 CPU 负载DUAL_BUFFER_MODE双缓冲机制支持连续传输适合流式数据高吞吐、连续通信如音频、图像‌2.1.5 SpiSequence1Interruptible Sequence不使能‌Interruptible Sequence‌ 指的是‌一个 SPI Sequence序列在执行过程中是否允许被更高优先级的 Sequence 中断‌。Sequence‌ 是由多个 ‌Job‌ 组成的逻辑集合用于按顺序执行一组 SPI 传输操作。‌Job‌ 是原子操作一旦开始执行就不能被中断必须完成其所有 Channel 的传输。但 ‌Sequence 之间‌ 可以在 Job 的“间隙”即一个 Job 完成、下一个 Job 开始前进行调度和抢占。‌作用‌若设置为 ‌可中断‌则当前正在执行的 Sequence 可在 Job 间被更高优先级的 Sequence 暂停挂起。高优先级 Sequence 执行完毕后原 Sequence 会从被中断处恢复执行 ‌典型应用场景‌实时性要求高的紧急通信如故障诊断、安全信号需要打断低优先级的周期性数据采集。2Seq End NotificationNULLSeq End Notification‌序列结束通知是指‌当一个 SPI Sequence序列传输完成或失败时SPI 驱动会自动调用预先配置好的回调函数向应用程序通知该事件‌。核心含义Sequence‌由一个或多个 Job 组成用于连续传输多个数据块可跨不同片选CS设备。‌End Notification‌表示该 Sequence 的传输流程已结束无论成功还是失败。‌回调机制‌需在配置中指定一个 C 函数如 SpiSequenceNotification()由驱动在 Sequence 完成后调用。关键特性‌仅适用于异步模式‌Level 1 或 Level 2同步模式Level 0不支持通知机制因为函数会阻塞直到传输完成。可中断 Sequence 的状态区分‌若 Sequence 被高优先级任务中断回调中可能收到 SPI_SEQ_PENDING若正常完成则为 SPI_SEQ_OK‌资源与状态管理‌开发者需确保在回调中正确处理缓冲区指针、传输状态等上下文信息 ‌3Seq Start NotificationNULLSeq Start Notification‌ 是一个与 ‌SPI 传输序列Sequence开始相关的回调机制‌。含义解释‌Seq Start Notification‌序列开始通知是指当一个 SPI ‌Sequence‌传输序列被调度并即将开始执行时系统会自动调用用户指定的回调函数即 Notification 函数。该机制主要用于 ‌通知上层软件或应用层‌某个 SPI 传输序列即将开始可用于日志记录性能监控外设准备如使能从设备调试跟踪4Sequence Id2配置Sequence Id会生成对应的宏定义5Job Assignment/ActiveEcuC/Spi/SpiDriver/SpiJob_2_GD1一个序列引用几个Job这些Job在一个通信Sequence中执行2.2 SpiGeneral1Already Init Det启用在Spi_Init API中使能或禁止SPI_E_ALREADY_INITIALIZED Det检测此参数使能时当程序中对SPI设备进行了重复的初始化则会报Already Init Det错误当关闭DET时此参数没有影响2Autosar VersionR4_0_3此参数选择AUTOSAR版本3CSIX Ram MirrorDISABLE“CSIX Ram Mirror” 在 DaVinci Configurator 的 SPI 配置中通常指将 SPI 通道如 CS0–CS3的片选信号Chip Select控制寄存器或状态映射Mirror到特定 RAM 区域用于快速软件访问或调试但该术语并非 AUTOSAR 或 Vector 官方标准命名很可能是特定 MCU 厂商如瑞萨、NXP在 MCAL 配置界面中的自定义描述。‌‌‌CSIX‌一般指 SPI 通道的第 X 个片选信号例如 CS0、CS1 等用于选择从设备。Ram Mirror‌并非物理 RAM而是指‌在内存映射 I/O 中为 SPI 控制寄存器如片选使能、状态标志创建一个可被 CPU 快速读写的“镜像副本”‌常见于某些 MCU 的外设控制器如 RH850、S32K为提升实时性或支持 DMA/低功耗模式而设计的机制。在 ‌DaVinci Configurator Pro‌用于 AUTOSAR MCAL 配置中若看到此选项通常关联的是 ‌MCU 的 SPI 驱动如 Spi_Hw.c如何抽象硬件寄存器访问‌启用后可能允许软件通过 RAM 地址而非外设总线直接读写 CS 状态‌但实际是否生效取决于底层 MCU 架构和 MCAL 实现如 Infineon TriCore、Renesas RH850‌。4CSIX Write VerifyWV_DISABLE该参数可以选择和支持DMA寄存器的WV_INIT_ONLY或WV_INIT_RUNTIME寄存器回读功能。WV_INIT_ONLY在静态寄存器上启用回读功能。WV_INIT_RUNTIME在静态和动态寄存器上启用回读功能。WV_DISABLE禁用CSIH寄存器的寄存器回读功能‌CSIX Write Verify启用寄存器回读功能‌是针对‌高速互连硬件如NPU/DPU‌ 的一项关键可靠性设计其含义是通过‌硬件自动机制验证寄存器写入操作的正确性‌。CSIX一种专为AI/网络芯片设计的‌高速数据交换接口协议‌类似于CXS、AXI用于芯片间如CPU↔NPU或板级高速通信。Write Verify写入验证硬件在完成寄存器写入后自动回读该寄存器值并与预期值比对确保写入成功。启用该功能的意义1、防止硬件配置失效场景通过CSIX接口配置NPU的寄存器如设置算精度、DMA地址、中断阈值风险信号干扰、时序偏移或接收端缓冲溢出可能导致配置丢失。作用启用后硬件自动回读校验若不一致则触发错误中断如CSIX_ERR_CFG2、满足可靠性场景需求在自动驾驶、工业控制等场景中关键配置如安全阈值必须100%准确示例写入NPU的最大温度阈值后未生效可能导致芯片过热烧毁。3、简化调试流程传统调试需软件手动回读比对消耗CPU资源而硬件自动验证将延迟降至纳秒级5Cancel Api不使能“Davinci Configurator 中 SPI 配置的 Cancel API”指的是 AUTOSAR MCAL SPI 驱动提供的 Spi_Cancel() 函数用于异步取消正在排队或传输中的 SPI 作业Job或序列Sequence不关闭硬件。‌‌‌Cancel API即 Spi_Cancel()‌ 是软件层操作作用于‌特定 SPI Job/Sequence‌中止未完成的异步传输触发回调并返回 SPI_JOB_CANCELLED 状态‌不影响 SPI 控制器硬件‌取消后可立即发起新传输。不是硬件复位‌与 Spi_DeInit()彻底关闭 SPI 外设不同Cancel 仅清队列、停当前传输控制器仍保持配置就绪。若未在 DaVinci Configurator 中显式启用 Cancel API 支持即使代码中调用 Spi_Cancel()也可能被编译器优化掉或返回错误导致运行时失效。‌‌6Channel Buffers Allowed0Davinci Configurator 中 SPI 配置的 Channel Buffers Allowed 决定每个 SPI 通道允许使用的数据缓冲区类型仅内部缓冲区IB、仅外部缓冲区EB或两者都允许。‌‌0仅允许内部缓冲区IB‌ —— 缓冲区由 SPI 模块内部管理通常用于小规模、同步传输‌1仅允许外部缓冲区EB‌ —— 缓冲区由上层如 Rte 或 Driver提供适用于异步或大块数据传输2同时允许 IB 和 EB‌ —— 灵活支持混合模式需确保调度与资源分配不冲突。‌‌该配置直接影响生成的 SPI 驱动代码中缓冲区分配方式必须与上层通信栈如 AUTOSAR SPI 合约和实际传输需求同步/异步、数据量匹配否则可能导致传输失败或内存越界。注意此参数属于 ‌SPI 模块通道级配置‌不同于“Job”或“Sequence”级别的缓冲设置。‌‌
http://www.gsyq.cn/news/1382310.html

相关文章:

  • 在 Python 项目中快速接入 TaoToken 并调用多模型完成对话
  • 如何为Sublime Text集成FFF:轻量级编辑器的强大搜索解决方案
  • 2026年5月浙江直流屏/交直流一体化电源/不间断电源/消防应急电源/eps应急电源厂家哪家好,认准温州平源电气有限公司 - 2026年企业推荐榜
  • Gemini 3.5 与 Agentic 时代:从技术革命到工程落地的完整指南
  • 5步解决AutoCAD字体缺失问题:FontCenter免费插件完全指南
  • 百度文库文档免费获取终极指南:简单三步实现纯净打印
  • sngrep源码解析:从packet捕获到UI渲染的完整技术流程
  • 分布式数据库架构演进:从集中式到分布式,三大路线一次讲清楚
  • 3步实现MoviePilot企业微信消息智能时段控制:告别深夜打扰的终极解决方案
  • Windows 11环境下,手把手教你配置MuMu 12的ADB,让uni-app真机调试更丝滑
  • 深度学习序列建模(二)—— 长期依赖与梯度爆炸/消失(四十四)
  • 洛雪音乐音源完全指南:免费获取全网无损音乐的最佳方案
  • 书匠策AI写毕业论文到底行不行?一个科普博主用完后给你交个底
  • [特殊字符] 毕业论文查重居然不要钱?书匠策AI这个功能90%的同学还不知道!
  • 书匠策AI凭什么让论文写作“开挂“?一个教育博主带你拆解它的毕业论文功能全链路
  • 书匠策AI到底有多离谱?一个论文科普博主拆解它的毕业论文“黑科技“全流程
  • Windows 11开发环境搭建:用系统SSH实现VS Code远程连接与开机自启
  • CANN-昇腾NPU-算子性能调优-从Profiler到AOE全链路
  • 2026年5月欧米茄售后网点布局优化报告(官方直营版) - 速递信息
  • 让B站缓存视频重获新生:m4s-converter技术解析与实战指南
  • 2026江西楼梯踏步砖实测体验:金唯冠品质落地全复盘 - 资讯焦点
  • 开发者在日常工作中如何利用Taotoken模型广场高效选型
  • 五分钟完成Taotoken的curl调用配置与测试
  • 终极指南:用abcjs在浏览器中轻松实现文本到五线谱转换
  • 德阳职教院校实力测评 从师资实训升学多维度对比 - 一搜百应
  • 广东民营建筑企业推荐 - 奔跑123
  • Claude Code 本地开发如何配置 Taotoken 聚合 API 实现稳定调用
  • Python分布式系统模式:从理论到实践
  • Python数据库连接池:原理与实现最佳实践
  • Python asyncio深入解析:从事件循环到协程调度