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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. MD1系列CAN STACK协议栈DEMO问题

MD1系列CAN STACK协议栈DEMO问题

已定时 已固定 已锁定 已移动 YT SDK
13 帖子 2 发布者 910 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • jiankang_wangJ 离线
    jiankang_wangJ 离线
    jiankang_wang YunTu
    写于 最后由 编辑
    #2

    你 CanStack 开得有padding,接收到的can报文长度不是7就丢掉了

    yifeng_xieY 1 条回复 最后回复
    0
    • yifeng_xieY 离线
      yifeng_xieY 离线
      yifeng_xie
      在 回复了 jiankang_wang 最后由 编辑
      #3

      jiankang_wang
      53098015-950a-4e15-87cb-55369b4651ac-image.png
      YCT里面看到CAN2的padding功能并没有开启呀

      1 条回复 最后回复
      0
      • jiankang_wangJ 离线
        jiankang_wangJ 离线
        jiankang_wang YunTu
        写于 最后由 编辑
        #4

        这个不是在Can模块的配置界面配置的。要在CanStack配置界面里:115f6fa7-21e6-40ab-a765-ef26589dd717-image.png

        yifeng_xieY 1 条回复 最后回复
        0
        • yifeng_xieY 离线
          yifeng_xieY 离线
          yifeng_xie
          在 回复了 jiankang_wang 最后由 编辑
          #5

          jiankang_wang 在 MD1系列CAN STACK协议栈DEMO问题 中说:

          最后由 编辑
          #4
          这个不是在Can模块的配置界面配置的。要在CanStack配置

          想再问下,为什么是7字节不到就丢弃了呢?正常周期性报文,DLC是8字节的,这8字节并不是长度字节。但是看代码实现,确实是拿了第一字节用于判断长度。不是很理解这个padding的作用

          1 条回复 最后回复
          0
          • yifeng_xieY 离线
            yifeng_xieY 离线
            yifeng_xie
            写于 最后由 编辑
            #6

            image.png
            代码里面是在这里使用了第0字节的数据来判断长度。

            aa0fe488-b334-4eef-bcfa-32c567eb2d73-image.png
            CANoe的发送的报文,第0字节是4。

            1 条回复 最后回复
            0
            • jiankang_wangJ 离线
              jiankang_wangJ 离线
              jiankang_wang YunTu
              写于 最后由 编辑
              #7

              开了padding,长度不够的消息会被丢掉,这是协议规定的。

              代码里面这部分分支是根据接收到的can报文和配置项计算允许的SF的长度,所以这里的SF_DL就是取第0个或者第1个字节。至于这里的RX_DL,就是can报文的长度。

              padding的意思,就是在消息长度不够一个can报文长度的时候,使用填充字节填充消息长度到can报文长度,例如发送8个字节的can报文,消息长度是1,填充是0xcc,总线上实际应该看到的报文是:

              0    1    2    3    4    5    6    7
              0x01 0x55 0xcc 0xcc 0xcc 0xcc 0xcc 0xcc 
              

              如果不开,就是这样的

              0    1
              0x01 0x55
              
              yifeng_xieY 1 条回复 最后回复
              0
              • yifeng_xieY 离线
                yifeng_xieY 离线
                yifeng_xie
                在 回复了 jiankang_wang 最后由 编辑
                #8

                jiankang_wang
                王工,是不是哪里有问题?
                ISO-15765-2处理的是TP层的事情,那用来接收周期性的应用报文是不是有问题?标准周期性报文还不涉及ISO-15765-2,只是老老实实搬运一下RX_DL长度的数据就好了。

                1 条回复 最后回复
                0
                • jiankang_wangJ 离线
                  jiankang_wangJ 离线
                  jiankang_wang YunTu
                  写于 最后由 编辑
                  #9

                  你们是需要TP接收到无关的消息的时候转到Can报文的处理逻辑是吧?这个的话CanStack确实是没做处理的,需要你自己改下EventCallback函数。

                  yifeng_xieY 1 条回复 最后回复
                  0
                  • yifeng_xieY 离线
                    yifeng_xieY 离线
                    yifeng_xie
                    在 回复了 jiankang_wang 最后由 编辑
                    #10

                    jiankang_wang
                    好的,谢谢王工。额外咨询下,后续CAN STACK会支持解析普通周期性报文吗(YCT上勾选是否周期性报文,中断内判断报文类型,然后有2个分支)?或者现有的CAN STACK/UDS STACK怎么与周期性报文的收发融合呢?

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

                      后续不会增加对应内容。

                      因为不管是只用flexcan还是只用CanStack,或者两者都需要用,都是需要修改对应的中断callback,而中断callback是只有一个的,所以就只能注入一次。而CanStack是一个middleware,不应该去修改flexcan的驱动。

                      CanStack注册的中断callback是这样的:
                      340f67f6-7d1c-4d97-8ac5-54948187ad15-image.png

                      如果用户有其他普通的can报文需要处理,可以直接再这个函数中修改,就跟直接使用flexcan接收是一样的

                      yifeng_xieY 1 条回复 最后回复
                      1
                      • yifeng_xieY 离线
                        yifeng_xieY 离线
                        yifeng_xie
                        在 回复了 jiankang_wang 最后由 编辑
                        #12

                        jiankang_wang
                        懂了,手动修改代码后,经TP层转发,报文收发已经正常。想问下,CAN STACK现在每个TP Channel都是1个发送ID与1个接收ID,那对于仅有发送或者仅有接收的情况是否支持呢?

                        1 条回复 最后回复
                        0
                        • jiankang_wangJ 离线
                          jiankang_wangJ 离线
                          jiankang_wang YunTu
                          写于 最后由 编辑
                          #13

                          目前TP层是固定了的,一个通道占用两个邮箱,一个用于发送,一个用于接收。不管这个TP Channel是否是功能寻址。

                          TP Channel在接收长消息的时候,还需要回复流控帧,所以不管是只接收还是只发送,都用到了两个邮箱。

                          如果只是接收或者发送短消息,就当作一个正常 Can 报文转发就行了,不需要使用TP

                          1 条回复 最后回复
                          0

                        • 云途开发生态介绍

                          快速上手云途开发生态

                        • 云途论坛规则/Yuntu Forum Rules

                          发帖前请查看

                        • YT CONFIG TOOL调查问卷

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

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

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