跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT MCAL
  4. ME0的SPI作为从机,接收数据出现异常

ME0的SPI作为从机,接收数据出现异常

已定时 已固定 已锁定 已移动 已解决 YT MCAL
12 帖子 2 发布者 3.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • EkkoE 离线
    EkkoE 离线
    Ekko
    写于 最后由 编辑
    #1

    配置:MCU从机配置DMA模式,Channel配置为EB类型,位宽8位,数据缓冲区为256,主机频率为13M。
    问题描述:当从机接收时,主机发送N字节后,CS,SCK突然拉高,若干us后,继续发送(256-N)剩余字节,此现象可能在256字节中发送中发生多次。发现主机在中途拉高CS,SCK后会导致从机无法接收完成,且无法恢复,产生此原因可能为硬件异常?另外有办法可以在产生异常后接收剩余字节吗?直到满256字节。

    1 条回复 最后回复
    0
    • EkkoE 离线
      EkkoE 离线
      Ekko
      在 回复了 Frank 最后由 编辑
      #6

      Frank 好的 感谢回复

      1 条回复 最后回复
      0
      • FrankF 离线
        FrankF 离线
        Frank YunTu
        写于 最后由 编辑
        #2

        1.按照你的描述,主机应该配置的是Pcs continue 模式,如果通信过程中出现PCS被拉起,属于主机方没有遵循通信协议导致的通信失败。
        2. 我无法判断pcs中途被拉高是否是主机侧的硬件问题导致的。slave不会拉pcs引脚。
        3. MCAL spi不支持接收不定长的数据

        EkkoE 2 条回复 最后回复
        0
        • EkkoE 离线
          EkkoE 离线
          Ekko
          在 回复了 Frank 最后由 编辑
          #3

          Frank 能确定是主机拉高

          1 条回复 最后回复
          0
          • EkkoE 离线
            EkkoE 离线
            Ekko
            在 回复了 Frank 最后由 编辑
            #4

            Frank 假设这种情况无法避免,那么从机如何从异常中恢复呢,能确保下一次能正常通信

            FrankF 1 条回复 最后回复
            0
            • FrankF 离线
              FrankF 离线
              Frank YunTu
              在 回复了 Ekko 最后由 编辑
              #5

              Ekko 如果能够保证master发送的数据数量跟slave需要接收的数量一致就可以(中间master即使pcs拉高也OK)。因为DMA会一直等待搬移的数据直到完成。因此不需要slave做额外的事情。

              EkkoE 2 条回复 最后回复
              0
              • EkkoE 离线
                EkkoE 离线
                Ekko
                在 回复了 Frank 最后由 编辑
                #6

                Frank 好的 感谢回复

                1 条回复 最后回复
                0
                • EkkoE 离线
                  EkkoE 离线
                  Ekko
                  在 回复了 Frank 最后由 编辑
                  #7

                  Frank 这种自恢复的需要取决master保证数据完整,客户担心master出现一次数据不完整后,后续取到的数据都会错位,所以还是需要一个手动恢复的策略,现在有调用Spi_Cancel(),但是会偶发出现hard fault(DMA传输过程中,关掉DMA会导致hard fault?),所以有更加简洁高效的方式吗?

                  FrankF 1 条回复 最后回复
                  0
                  • FrankF 离线
                    FrankF 离线
                    Frank YunTu
                    在 回复了 Ekko 最后由 编辑
                    #8

                    Ekko 调用Spi_Cancel关闭传输不会导致导致Hardfault。你可以在hardfault出现时,看下是什么原因导致的hardfault。

                    EkkoE 1 条回复 最后回复
                    0
                    • EkkoE 离线
                      EkkoE 离线
                      Ekko
                      在 回复了 Frank 最后由 编辑
                      #9

                      Frank 现在查看堆栈,最后是从Disable DMA跳至hard fault,查看DMA寄存器并没有错误标志位。现在明确就是加了Spi_Cancel,就会出现hard fault,不加是不会出现的。
                      a7e873b6-3aa9-4076-984a-dc1f34faf779-77469c1ed71c03f0b9eda6c1631a08d.jpg
                      47354b50-0728-46f1-aa73-9aee9c3fb965-8bfa93ce08d4633527decb782927abc.jpg
                      17dda825-180e-45d0-ac68-f8af9aa990e1-a54112abd7ba573e406d66c22cd60c2.jpg

                      1 条回复 最后回复
                      0
                      • FrankF 离线
                        FrankF 离线
                        Frank YunTu
                        写于 最后由 编辑
                        #10

                        image.png
                        看样子是发生非法地址访问了。你用的是那个版本的驱动?

                        1 条回复 最后回复
                        0
                        • FrankF 离线
                          FrankF 离线
                          Frank YunTu
                          写于 最后由 编辑
                          #11

                          jianpeng.zhao@ytmicro.com 这是我的邮箱,如果方便的话,你可以发个腾讯会议的链接,我远程帮你看下

                          EkkoE 1 条回复 最后回复
                          0
                          • EkkoE 离线
                            EkkoE 离线
                            Ekko
                            在 回复了 Frank 最后由 编辑
                            #12

                            Frank 目前又修改了中断优先级,还在挂测,如果还复现我再邮件发送🤝

                            1 条回复 最后回复
                            0
                            • ,FrankieF Frankie 将这个主题转为问答主题
                            • ,FrankieF Frankie 将这个主题标记为已解决

                          • 云途开发生态介绍

                            快速上手云途开发生态

                          • 云途论坛规则/Yuntu Forum Rules

                            发帖前请查看

                          • YT CONFIG TOOL调查问卷

                            帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                          • can
                            25
                            demo
                            23
                            lin stack
                            13
                            uds
                            13
                            md14
                            6
                            yt-link
                            6
                            fbl
                            5
                            adc模块
                            4
                            Online Users
                            • 登录

                            • 登录或注册以进行搜索。
                            • 第一个帖子
                              最后一个帖子
                            0
                            • 版块
                            • 最新
                            • 标签
                            • 热门