Semidrive E3 MCAL SPI 模块测试 (一)

一、测试环境

开发板

代码包

示例 SPI

拨码

SD103_E3_GATEWAY_EPOWERTRAIN_A03_041

MCAL3.0+PATCH 4676506

SPI7

1110


表 (1)



二、测试过程

1、原理图


图 (1)


图 (2)

        开发板上贴 R1311、R1312、R1313、R1314;SPI7 的四个引脚引到 J2305.



2、Datasheet

Pin Name

MUX

Moudule

Function

Default

GPIO_S10

MUX3

SPI7

SS0

 

GPIO_S11

MUX3

SPI7

SCLK

 

GPIO_S12

MUX3

SPI7

MISO

 

GPIO_S13

MUX3

SPI7

MOSI

 


表 (2)来源:表 Pin Multiplexing of Digital GPIO Pins in Safety Domain



3、配置 MCAL

3.1、Mcu


图 (3)

3.2、Port


图 (4)


图 (5)       


3.3、Spi


图 (6)

SpiEbMaxLenth 等同于 spi_test.c 中的 SPI_BUFFER_SIZE_CHANNEL_x。

SpiChannel:

  • SpiChannId:全局唯一的数据 Buffer 识别号,配置过程必须保持这个编号连续且单调递增,生成时会根据 BufferId 编号排序。
  • SpiChannelType:数据 Buffer 类型主要有两种 IB 和 EB 区别和意义如下:

       IB:内部 Buffer,由 Spi 驱动内部定义生成对应的数组,用户在数据传输前需先通过 WriteIB 接口将数据由用户提供的内存区域拷贝到驱动内部的 Buffer 中,然后在数据传输完成后通过 ReadIB 将数据从 Spi 驱动内部拷贝到用户目的内存区域。

       EB:外部 Buffer 这里的外部概念强调是 Spi 驱动的外部,就是用户定义的数据缓存区,数据传输前必须通过 Setup_EB 接口设置外部数据缓存区地址及长度信息;数据传输完成后接收到的数据已经直接存放在用户指定的内存地址空间中,对比 IB 的类型的数据 Buffer 这里少了 1-2 次数据拷贝操作,但是在使用异步传输时要求用户提供的数据 Buffer 对应的内存空间在数据传输过程中不能有除了 Spi 驱动外的软件写入,要保证 Spi 驱动的独占访问,常见的错误使用方式是将数据 Buffer 定义在函数体内(栈上),当接口退出后栈会被其他的上下文使用此时就会出现竞争写栈空间导致收发的数据错误。

       注:用户层提供的外部 Buffer 需要注意地址对齐,使用 dma 模式时统一按 32 字节对齐;否则不使用 DMA 时按数据位宽对应对齐 4-8bits 按 1 字节对齐,9-16bits 按 2 字节对齐,16-32bits 按 4 字节对齐;并且即使不需要更新此 EB 通道的数据缓冲区地址,每次传输前都需要重新调用接口设置 EB Buffer 的地址信息---即使此时设置的地址可能每次都是相同的。

  • SpiDataWidth:

      传输的数据宽度,单位 bit。这里需要说明的是内部在处理不同数据宽度的时候实际是还是按字节 4-8bits)、双字节(9-16bits)、字(17-32bits 的方式来进行处理的,也就是对 EB 类型的数据 Buffer 而言,用户也需要遵循这个规则;同一个SpiJob 下的所有数据 Buffer 的数据宽度都必须保持一致。

  • SpiDefaultData:

      默认发送数据,当用户不配置时候默认为全 FF 值,具体取决于数据宽度配置。

  • SpiEbMaxLenth:

      仅当数据 Buffer 类型为 EB 时此选项有意义,其限制了这个数据 Buffer 允许传输的数据长度的最大值,实际传输过程传输的数据量可以小于这个值。

  • SpiNBuffers:

     仅当数据 Buffer 类型为 IB 时此选项有意义,其定义了这个数据 Buffer 的数据长度,实际传输时也永远是这个长度。

  • SpiTransferStart:

      定义当前数据 Buffer 的 bit 序,LSB 为低 bit 优先反之为高 bit 优先;同一个 SpiJob 下的所有数据 Buffer 的比特顺序都必须保持一致。

 

图 (7)


图 (8)


SpiExternalDevice:

  • SpiBaudrate单位 bps, 500000 就是 500Kbps,Master 模式最大支持到 25Mpbs@100M (当走线或对端 Slave 移出数据的时机偏晚时需要使能 Master 的 MISO 采样延迟,以确保正确采样 MISO 值),Slave 模式最大支持到 25Mbps@100M 最小 200K。

  • SpiCsPolarity:片选信号极性。

  • SpiEnableRx:是否使能接收。

       -  SpiHwUnit:指示此设备挂接在哪一路 SPI 控制器上 SPI1-SPI8 对应 CSIB1-CSIB8,当作为 Slave 时意义相同。

       -  SpiTimeClk2Cs:片选信号有效后延时多少秒(实际是以 sclk 的周期为单位)后再出 sclk 信号,对应通用概念建立时间,仅仅在使用硬件 CS 且作为 Master 模式此配置参数有意义。

  • SpiTimeClk2CsEnd:传输结束 sclk 信号停止后延时多少秒(实际是多少个 sclk 的 clk 周期)后再驱动片选信号取消片选,对应通用概念的保持时间,仅仅在使用硬件CS且作 Master 模式此配置参数有意义。
  • SpiCsViaGpio:当选择通过软件控制 GPIO 来驱动片选信号的情况下这里需要配置,指定一个 GPIO 引脚作为片选信号的控制。当使用软件控制 GPIO 来驱动片选信号时需要注意此时硬件 SS0 信号如果不特殊处理,可能会同时出现硬件驱动的片选信号 SS0 和软件控制的 GPIO 两个片选信号同时选中两个外部设备从而导致通信冲突,特殊处理方式参 SpiCsPin 配置项说明。

  • SpiCsIdentifier:Spi 控制器支持四个 CS 引脚信号控制,使用 0-3 对应 SS0-SS3;当 SpiCsSelection 选择 VIA_GPIO 时,此配置项无效,但要求配置为 0。

  • SpiDataShiftEdge/SpiShiftClockIdleLevel:配置 SPI 通信时序参考后续的表格。

  • SpiCsSelection:配置当前设备使用的 SPI 控制器硬件控制的片选信号还是软件通过 GPIO 驱动的。


  • SpiCsPin:此项仅在 SpiEnableCs 为 true 且 SpiCsSelection 选择 VIA_GPIO 时有效;这意味着当前 SPI 控制器的 SS0 引脚上同时接着另一个设备 A,此选项就指示 SS0 对应的引脚编号。其目的提供硬件 SS0 的引脚信息给当前设备 B,以使当前设备在传输时可以控制这个引脚以避免 SS0 引脚在当前设备 B 传输过程中被硬件驱动导致也设备 A 的片选有效,这样就会导致同一个 SPI 总线上同时有不止一个外部设备的片选信号有效。例如设备 B 连接到 SPI1 SS0(GPIO_B0),并且 GPIO_A1 将被用作与设备 A CS 信号,因此在设备 A 的数据传输过程中,防止 SS0(GPIO_B0) 被硬件驱动导致设备 B 的 Cs 信号同时有效。也请参阅 SpiCsIdentifier 的描述。内部的处理办法是此时将 SPI1 的 SS0 对应引脚的 CS 脚(GPIO_B0)PinMux 修改到 GPIO 上(断开 PAD 和 SPI 控制器之间的连接),因此需要注意的是对设备B对应片选脚 (GPIO_A1) 和硬件片选信号 SS0(GPIO_B0) 在 Port 模块的配置的初始电平和上下拉默认电平要能确保 CS 信号为无效状态。

  • SpiEnableCs:仅在 SpiCsSelection 选择 VIA_GPIO 是配置项才有效且表示当前 SPI 控制器的 SS0 脚在使用即 SS0 脚上有外接设备。

  • SpiMisoDelay:是否需要使能 MISO 接收,还有就是 MISO 的时延,因为有一些实际应用,会快一个时钟信号采样 MISO 信号,导致接收信号最后一位丢失。
  •  

    图 (9)


    图 (10)


    图 (11)


    图 (12)


    图 (13)

     

    4、IAR

    Spi_test.c 函数结构:

    SPI_BUFFER_SIZE_CHANNEL                  

    fifo_init;fifo_show:static void fifo_init(void* addr,uint32 val,uint32 len,uint8 width),第二个参数是 SPI 的值,共 32 位无符号整型;

    Tc_spi_asny_03

    Tc_spi_async_03_less

    async_transmit_slave

    Tc_spi_async_loop_back

    Tc_spi_async_loop_back_early_cs_end

    spi_loop_demo

     Spi_test.c 默认不做更改。



    5、硬件连接


    图 (14)

    LAP-C PRO(32128M) A0 连接 GPIO_S10 做 SPI7_SS0;

    LAP-C PRO(32128M) A1 连接 GPIO_S11 做 SPI7_SCLK;

    LAP-C PRO(32128M) A2 连接 GPIO_S13 做 SPI7_MOSI;

    LAP-C PRO(32128M) GND 连接 GPIO_S10 做 SPI7_GND;



    6、SPI 测试

    6.1、使用逻辑分析仪 LAP-C PRO(32128M)

    图 (15)



    图 (16) 一个 JOB 三个通道:channel_28,channel_29,channel_30

     

    一个片选内只有一个 JOB 的内容。

    channel_28:0010 1000 0010 1000 0010 1000 0010 1000

    channel_29:0010 1001 0010 1001 0010 1001 0010 1001

    channel_30:0011 0000 0011 0000 0011 0000 0011 0000

    一个时钟周期内传递一个 bit 的数据。


    6.2、使用示波器(Tektronix MDO3054)

    图 (17)


    图 (18)

    SS0:gpio_s10->示波器通道 1

    SCLK:gpio_s11->示波器通道3

    MOSI:gpio_s13->示波器通道 2

     频率 8M 如何计算得知:一个 bit 是 120ns,1/120ns≈8.333M。

     

    图 (19)

    若 SpiChannel_28 的 SpiEbMaxLength 设为 4,则传输的数据是 2828=0010 1000 0010 1000。


    图 (20)

     

    7、串口发命令

    Help->listcase->runcase 1800;



    图 (21)

     

     

    注1:SPI 四种模式

    SpidataShiftEdge

    SpiShiftClockIdLevel

    Spi mode

    LEADING

    LOW

    MODE1

    TRAILING

    LOW

    MODE0

    LEADING

    HIGH

    MODE3

    TRAILING

    HIGH

    MODE2


    表 (3)

    MODE0:时钟线空闲时低电平,第一个跳变沿(采样点)在第一个 bit 的中间

    MODE1:时钟线空闲时低电平,第二个跳变沿(采样点)在第一个 bit 的中间

    MODE2:时钟线空闲时高电平,第一个跳变沿(采样点)在第一个 bit 的中间

    MODE3:时钟线空闲时高电平,第二个跳变沿(采样点)在第一个 bit 的中间

           注2:Spi 会根据 MCU 配置支持 1,3,5 三种数量的多核场景,默认不在 ResM 进行任何配置的情况下,Spi 工作在单核模式所有的资源划分在 SF 核心上。当有需要将不同 Spi 控制器分在不同核心上时需要在 ResM 模块中进行配置,详见 《SemiDrive_E3_MCAL User Guide》。

     

     

    参考资料:

    《E3400&E3600 Series MCU Datasheet Release 00.16》

    《E3400&E3600 MCU Technical Reference Manual Release 00.12》

    《SD103_E3_REF_GATEWAY_ePOWERTRAIN_A02_丝印图》

    《SD103_E3_REF_GATEWAY_ePOWERTRAIN_A02_SCH》

            《SemiDrive_E3_MCAL User Guide》,适用 MCAL PTG3.0 及后续版本




    欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com

    作者:Rita Liu / 刘倩

    ★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

    ★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

    评论