GchLeo 发表于 2021-11-29 16:52

除SPI2外其它SPI通道 DMA无法发送

本帖最后由 GchLeo 于 2021-12-2 16:23 编辑

1. 我使用了模板SPI_Master_DMA_Mode,自带使用的是SPI2,调试可以正常使用
2. 当我把模板中的SPI2换成其它SPIX(SPI0,SPI1,SPI3)均无法触发DMA0通道的发送完成中断,导致无法发送
3. 仿真发现修改SPIX后,相应SPI的配置寄存器与模板中SPI2除了CTLR5,PADDR5/6,CPAR5/6外也都相同,DMA配置也是完全相同修改后的工程见附件

呐咯密密 发表于 2021-12-1 09:43

有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。其次,对照DMA通道请求表查一下DMA的通道是否对应。你用的哪一款MCU也没有说,只根据你的工程名称我在官网找不到这颗料,如果可以提供一下手册吧

GchLeo 发表于 2021-12-2 10:04

呐咯密密 发表于 2021-12-1 09:43
有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。 ...

已经找到原因了是由于每个SPI对应的DMA通道不一致导致的,一开始以为DMA通道可以配置给任意SPI呢

呐咯密密 发表于 2021-12-2 10:06

GchLeo 发表于 2021-12-2 10:04
已经找到原因了是由于每个SPI对应的DMA通道不一致导致的,一开始以为DMA通道可以配置给任意SPI呢 ...

解决了就好,手册还是很重要的,可惜我在官网找不着

GchLeo 发表于 2021-12-2 14:46

本帖最后由 GchLeo 于 2021-12-2 14:49 编辑

呐咯密密 发表于 2021-12-2 10:06
解决了就好,手册还是很重要的,可惜我在官网找不着
DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置位,但是FTIF总是不置位,这个可能有哪些原因

GchLeo 发表于 2021-12-2 14:49

呐咯密密 发表于 2021-12-1 09:43
有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。 ...

DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置位,但是FTIF总是不置位,这个可能有哪些原因

呐咯密密 发表于 2021-12-2 14:53

GchLeo 发表于 2021-12-2 14:46
DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置 ...

你的数据接收完整吗?如果使用半传输中断能进去吗

GchLeo 发表于 2021-12-2 16:02

呐咯密密 发表于 2021-12-2 14:53
你的数据接收完整吗?如果使用半传输中断能进去吗

还有我发现SDO输出的空闲电平是低电平,我把SDO的引脚配置成为上拉输出空闲电平依然是低电平

Justin256 发表于 2021-12-2 16:04

进来学习下,越来越好!

呐咯密密 发表于 2021-12-2 16:06

GchLeo 发表于 2021-12-2 16:02
还有我发现SDO输出的空闲电平是低电平,我把SDO的引脚配置成为上拉输出空闲电平依然是低电平 ...

你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何问题的那种,中断啥的也正常

GchLeo 发表于 2021-12-2 16:15

本帖最后由 GchLeo 于 2021-12-2 16:25 编辑

呐咯密密 发表于 2021-12-2 16:06
你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何 ...
我现在用的就是SPI2(主板,主机用), 因为SPI从机是一个支持16bit spi的传感器,我暂时用一块板子模拟的SPI的从机(用的是SPI1)MCU:KF32A156MQV我把主机的程序放在附件里了



GchLeo 发表于 2021-12-2 16:39

呐咯密密 发表于 2021-12-2 16:06
你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何 ...

那SDO空闲输出的电平由什么决定

呐咯密密 发表于 2021-12-2 17:07

GchLeo 发表于 2021-12-2 16:15
我现在用的就是SPI2(主板,主机用), 因为SPI从机是一个支持16bit spi的传感器,我暂时用一块板子模拟的SPI ...

首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧,首先你需要用逻辑分析仪解析数据接收是否完整,如果没有逻辑分析仪,那就在debug模式下看接收数据是否完整。如果不完整你需要看一下SPI的速度是否正确,DMA的速度是否足够,因为我遇到因为DMA速度不够而导致数据接收不完整。如果上两项都无问题。那你先不用DMA直接读取数据,看看数据是否完整。如果是完整的。那么用示波器看一下你的CSN是否是在所有的CLK发完后再上拉回来的,因为会有使能提前回拉,导致数据不完整。
其实你的思路是先保证你不使用中断能完整无误的通信,在这个前提下再进行中断,如果你的数据都接收不完整,后面的活都是无用功。

GchLeo 发表于 2021-12-2 17:36

呐咯密密 发表于 2021-12-2 17:07
首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧, ...

我模仿从机,并没有使用CS引脚,因为只有一个从机,就没有接CS
我主机用的一块开发板,从机用的一块开发板,里面用的都是样例程序

GchLeo 发表于 2021-12-2 17:43

本帖最后由 GchLeo 于 2021-12-2 17:56 编辑

呐咯密密 发表于 2021-12-2 17:07
首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧, ...
我用主机发的数据,在示波器上看都发出来了,且是完整的,然后在从机端接收仿真,发现数据会移位。
我仿真的结果就是,数据bit都保存完整,就是接收到的数据对这些数据进行了移位,而且在不同上电周期,移位也是不同的。环行的移位(最后一位可以变成第一位,第一位可以变成第二位这样的)我使用的是16bit传输方式下面是我写下来从机接收到主机发送的数据:
主机发送0X017F0000 0001 0111 1111
从机接收0xFE021111 1110 0000 0010
从机接收0x80BF1000 0000 1011 1111
从机接收0x17F00001 0111 1111 0000
从机接收0xC05F1100 0000 0101 1111(收到的数据都可以看成是正确数据的剪切重组)
偶尔也会有接收正确,我记得同样的程序,昨天我是全天都接收正确的


DMA速度是否足够怎么理解,波特率我设置的是166K

caigang13 发表于 2021-12-2 20:41

是不是还有其它配置没有修改

呐咯密密 发表于 2021-12-3 09:37

GchLeo 发表于 2021-12-2 17:43
我用主机发的数据,在示波器上看都发出来了,且是完整的,然后在从机端接收仿真,发现数据会移位。
我仿真 ...

你的从设备的SPI配置代码贴一下,或者你就用传感器测试,然后把传感器的SPI协议贴出来

GchLeo 发表于 2021-12-7 11:13

此问题,暂时关闭,暂时开发没有问题了
1. 把SPI2 polling slave代码放到一块负载板中
2. 把SPI2 DMA master代码放到一块负载板中
目前调试正常,暂无问题,我后续会把SPI0~SPI3全部测试一遍,

单片小菜 发表于 2021-12-22 16:24

这个问题是咋回事?没有关闭?

别看我照片 发表于 2021-12-22 16:39

为什么将问题关闭了,咋回事呢?
页: [1]
查看完整版本: 除SPI2外其它SPI通道 DMA无法发送