查看: 4649|回复: 8

[求助] K20使用SPI从站FIFO发送不对

[复制链接]
  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
    发表于 2017-12-14 11:11:58 | 显示全部楼层 |阅读模式
    本帖最后由 bjx1234 于 2017-12-14 11:14 编辑

    我使用了K20与KL16以DMA方式进行SPI通信。K20做为SPI从站。收到8个字节后产生DMA接收完成中断。然后应答启动DMA发送。接收正常,发送不正常。例程KINETIS_120MHZ_SC_DSPI给出的是查询的方法,而且只有一次,我改成多次的也不正常。


    由于是spi slave,那么自己没有收到master的时钟,就不能把数据放入shift register.
    做为SPI master发出8个oxff, slave同时发出00~07,多次循环运行。在master这边查看收到的是07,00~06.
    无论用FIFO还是用DMA,现象都一样。查看看TFUF是1,是发生了FIFO underflow的情况。参考手册却不说这种情况怎么才能改对。

    If an external bus master initiates a transfer with a module slave while the slave's TX
    FIFO is empty, the Transmit FIFO Underflow Flag (TFUF) in the slave's SR is set. See
    Transmit FIFO Underflow Interrupt Request for details.





    我知道答案 目前已有8人回答
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24890
    最后登录
    2025-7-21
    发表于 2017-12-14 13:36:06 | 显示全部楼层
    如果不加DMA,只用FIFO也是有这个问题吗?
    你用逻辑分析看下SPI波形,然后把波形也贴出来。
    从机在接收的时候,就把发送的FIFO也填进去,不要等都接完再填。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2017-12-14 15:11:37 | 显示全部楼层
    本帖最后由 bjx1234 于 2017-12-14 15:13 编辑
    小恩GG 发表于 2017-12-14 13:36
    如果不加DMA,只用FIFO也是有这个问题吗?
    你用逻辑分析看下SPI波形,然后把波形也贴出来。
    从机在接收的时 ...

    现在用了DMA的方式,收到8个字节,DMA中断,返回8个字节。为了调试方便,无论master发什么,程序里都让slave应答00,01,02,03,04,05,06,07。逻辑分析仪看到发出来却是07,00,01,02,03,04,05,06
    TIM图片20171214150932.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5618
    最后登录
    2021-12-22
    发表于 2017-12-14 15:21:15 | 显示全部楼层
    收到8个字节后产生DMA接收完成中断。然后应答启动DMA发送。
    猜测:如果应答不依赖接收内容分析,似乎就应该在接收启动时(发现CS拉低)就要填充发送FIFO,而不是在8个字节后接收完成 才去填充发送FIFO。

    如果接收内容分析后 才知道 要应答什么, 那接收发送就不能连续进行了。

    或者说,如果发接连续进行
    主端在把CS拉低前就要准备好发送内容和接收缓冲.
    子端在发现CS拉低 就要立即准备好发送内容,  而不是在收完才去准备发送内容。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2017-12-14 16:13:17 | 显示全部楼层
    本帖最后由 bjx1234 于 2017-12-14 16:23 编辑
    okwh 发表于 2017-12-14 15:21
    收到8个字节后产生DMA接收完成中断。然后应答启动DMA发送。
    猜测:如果应答不依赖接收内容分析,似乎就应该 ...

    我同意你的猜测。从上图上看到,CS拉低在CLK前面有一段时间。我试过在CS拉低的中断里,就准备好了要传送给DMA的数组了。问题是Slave没有收到clock 就没有办法把数组里的成员移到Shift Register去,如果您有好办法,请教我一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24890
    最后登录
    2025-7-21
    发表于 2017-12-14 17:06:10 | 显示全部楼层
    bjx1234 发表于 2017-12-14 16:13
    我同意你的猜测。从上图上看到,CS拉低在CLK前面有一段时间。我试过在CS拉低的中断里,就准备好了要传送给 ...

    按道理,从机的发送buff填充是不需要等时钟来再填的,只要buff为空,就能填。你可以一上电就把slave的发送buff填上,这样等有时钟来的时候,就能接受的时候直接把之前的buff发出去了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5618
    最后登录
    2021-12-22
    发表于 2017-12-14 23:49:10 | 显示全部楼层
    本帖最后由 okwh 于 2017-12-14 23:55 编辑

    试检查:
    发送接收都分别试试使用 0xAA  或 0x55,  主机多发送些字节(>8字节,比如16~18字节),并且都在CS前就准备,  这样 用逻辑分析仪可清晰检查 波形如何对应对齐的

    从CS到时钟发生 这时间间隔似乎太长了吧?怎么回事呢?  K系列的,我还真没用过,

    感觉 象是 前次的07 接后面的 00~06,    或者说, 从机回送的字节要迟些。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-2 13:42
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    253

    帖子

    0

    高级会员

    Rank: 4

    积分
    576
    最后登录
    2020-4-7
     楼主| 发表于 2017-12-15 11:50:01 | 显示全部楼层
    本帖最后由 bjx1234 于 2017-12-15 11:51 编辑

    Freescal文档写的真心是太差了。有那么多功能却没有那么资料和例程。让人家自己摸索,说什么好?到处发帖也解决不了。NXP官方的英文社区里也有人遇到同样问题,没有得到有效回答。实在不行,只好放弃了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    29
    最后登录
    2021-6-18
    发表于 2018-11-13 08:04:40 | 显示全部楼层
    我也遇到了同样的问题解决不了,不知道怎么清楚发送缓存器里错误放进去的数据。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 10:20 , Processed in 0.109617 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表