MSPI_DebugSop
Revision History¶
Revision NO. | Description |
Data |
---|---|---|
1.0 | Initial release | 03/30/2024 |
1. 概述¶
MSPI在使用过程中,问题发生不频繁,多是对特殊场景的需求。本文提供几种情况用于参考调试。
包含数据发送异常,数据接收异常,通讯timeout等,提供排查流程图以及各步骤的说明。
各平台的mspi内部寄存器基本不变,CLKGEN,PADMUX,BDMA寄存器会存在差异。排查时请以实际平台为准。
2. Keyword¶
-
GPIO mode:PAD可以被通过padmux复用成mspi引脚,也可以被设定成GPIO引脚,当被设定成GPIO mode时,复用mspi优先级较低,会受影响。
-
PADMUX: PADMUX设定bank为PADTOP,用于指定复用关系。
-
CLKGEN: source clock设定寄存器,用于选取IP的时钟源。
-
BDMA: mspi dma mode需要BDMA这个IP来协助工作,作用是在内存与mspi之间完成数据搬运的功能。
3. 数据异常¶
数据发送异常,包含没有波形,数据错误,个别引脚(CS/CK/MOSI)没有波形。其中,没有波形可能伴随出现timeout err log,可以查看timeout章节。
3.1. 排查流程图¶
数据异常检查流程
3.2. 步骤说明¶
流程节点 | 节点说明 |
出口 | 需提供的分析数据 |
---|---|---|---|
A | 抓取波形,这是通讯问题最直观的分析方法 | B C | - |
B | 对比波形解析和预期数据是否一致 | D E F | - |
C | 无波形的情况,一般发生在引脚错误(设为GPIO并拉高拉低确认引脚是否正确),padmux错误,以及clk没有enable导致的通讯无法进行,也有可能只是设定的触发条件刚好是个别引脚问题,尝试设定其他引脚作为触发条件,当出现个别引脚异常时,判断GPIO mode是否被打开,以及硬件影响 | G H I J | - |
D | 数据丢失,可能是设定的发送字节长度不对 | K L | mspi bank register bdma bank register |
E | 数据错误 | L M | - |
F | 是否个别引脚无波形 | N | - |
G | 抓取波形的引脚错误,重新与HW确认应该抓取的引脚 | O | - |
H | padmux寄存器设定错误,重新设定 | P | - |
I | clkgen没有使能,查找CLKGEN register table,确认gate bit是否打开(SPI0 REG:0x1038 0x33 bit[0]; SPI1 REG:0x1038 0x33 bit[8],对应bit如果为1,则表示clk被关闭) | Q | - |
J | LA或示波器的触发条件引脚刚好无动作 | - | - |
4. timeout¶
出现mspi timeout err log时,一般为代码触发时间节点不合理、双系统都开了MSPI、或者clkgen没有enable,请直接提供code branch,mspi bank和clkgen bank。
如riscv 端在使用spi时没有clk的话,可以排查下是否arm端的spi节点都disabled了,但是dts对应的spi clk节点需要增加ignore 属性,例如:
pcupid.dtsi
spi0: spi@1f222000 { compatible = "sstar,mspi"; mspi-group = <0>; clocks = <&CLK_mspi0>; reg = <0x0 0x1F222000 0x0 0x200>; #address-cells = <1>; #size-cells = <0>; interrupts = <GIC_SPI INT_IRQ_MSPI_0 IRQ_TYPE_LEVEL_HIGH>; dma-enable; cs-num = <1>; //cs-ext = <PAD_UNKNOWN>; //4to3-mode; //clk-out-mode = <27000000>; status = "disabled"; spidev0@0 { compatible = "lwn,bk4"; spi-max-frequency = <2000000>; reg = <0>; }; };
pcupid-clks.dtsi
CLK_mspi0: CLK_mspi0 { #clock-cells = <0>; compatible = "sstar,composite-clock"; clocks = <&CLK_mpll_432m_div4>,<&CLK_mpll_288m_div2>,<&CLK_xtali_12m>,<&CLK_spi_synth_pll>,<&CLK_VOID>,<&CLK_VOID>,<&CLK_VOID>,<&CLK_VOID>; reg = <0x0 REG_CKG_MSPI0_BASE 0x0 0x4>; mux-shift = <2>; //2+REG_CKG_MSPI0_OFFSET mux-width = <3>; gate-shift = <0>; //0+REG_CKG_MSPI0_OFFSET // auto-enable = <0>; ignore = <1>; };
5. 寄存器bank¶
-
mspi bank
mspi0 mspi1 bank 0x1110 0x1119 -
clkgen bank
mspi0 mspi1 bank 0x1038 0x1038 -
bdma bank
bdma bdma2 bdma3 bank 0x1002 0x100a 0x100b