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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1MD14GMLHT配置SENT检测不到报文

YTM32B1MD14GMLHT配置SENT检测不到报文

已定时 已固定 已锁定 已移动 YTM32B1M系列
sent
7 帖子 2 发布者 1.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • hamsterH 离线
    hamsterH 离线
    hamster
    写于 最后由 编辑
    #1

    我配置代码如下所示
    3fa36dde-5ed2-4b5a-8a23-ad49255dcc29-image.png

    const sent_channel_config_t sentChannelConfig[2] = 
    {
        /* sent_channel_config0 */
        {
            .channelId = 0,
            .tickDuration = 1,
            .inputFilter = 2,
            .diagConfig =
            {
                .diagEvents = (
                                SENT_EV_CAL_RESYNC |
                                SENT_EV_CAL_20_25 |
                                SENT_EV_SMSG_OFLW |
                                SENT_EV_FMSG_OFLW |
                                SENT_EV_PP_DIAG_ERR |
                                SENT_EV_CAL_LEN_ERR |
                                SENT_EV_CAL_DIAG_ERR |
                                SENT_EV_NIB_VAL_ERR |
                                SENT_EV_SMSG_CRC_ERR |
                                SENT_EV_FMSG_CRC_ERR |
                                SENT_EV_NUM_EDGES_ERR |
                                SENT_EV_NONE
                              ),
                .idleCount = SENT_BUS_IDLE_DISABLED,
                .calibVar = SENT_CALIB_VAR_25_PERCENT,
                .diagPulse = SENT_PULSE_CHECK_BOTH,
                .pausePulse = SENT_PAUSE_PULSE_ENABLED,
                .succesiveCal = SENT_SUCC_CAL_CHK_LOW_LATENCY
            },
            .fastMsgConfig =
            {
                .numberOfNibbles = 5,
                .dmaEnable = false,
                .crcIncludeStatus = false,
                .disableCrcCheck = false,
                .crcType = SENT_CRC_RECOMMENDED,
            },
            .slowMsgConfig =
            {
                .dmaEnable = false,
                .crcType = SENT_CRC_RECOMMENDED,
            }
        },
        /* sent_channel_config1 */
        {
            .channelId = 1,
            .tickDuration = 1,
            .inputFilter = 2,
            .diagConfig =
            {
                .diagEvents = (
                                SENT_EV_CAL_RESYNC |
                                SENT_EV_CAL_20_25 |
                                SENT_EV_SMSG_OFLW |
                                SENT_EV_FMSG_OFLW |
                                SENT_EV_PP_DIAG_ERR |
                                SENT_EV_CAL_LEN_ERR |
                                SENT_EV_CAL_DIAG_ERR |
                                SENT_EV_NIB_VAL_ERR |
                                SENT_EV_SMSG_CRC_ERR |
                                SENT_EV_FMSG_CRC_ERR |
                                SENT_EV_NUM_EDGES_ERR |
                                SENT_EV_NONE
                              ),
                .idleCount = SENT_BUS_IDLE_DISABLED,
                .calibVar = SENT_CALIB_VAR_25_PERCENT,
                .diagPulse = SENT_PULSE_CHECK_BOTH,
                .pausePulse = SENT_PAUSE_PULSE_ENABLED,
                .succesiveCal = SENT_SUCC_CAL_CHK_LOW_LATENCY
            },
            .fastMsgConfig =
            {
                .numberOfNibbles = 5,
                .dmaEnable = false,
                .crcIncludeStatus = false,
                .disableCrcCheck = false,
                .crcType = SENT_CRC_RECOMMENDED,
            },
            .slowMsgConfig =
            {
                .dmaEnable = false,
                .crcType = SENT_CRC_RECOMMENDED,
            }
        },
    };
    
    /* SENT user configuration */
    const sent_driver_user_config_t sentUserConfig = {
        .fastMsgDmaPtr = NULL,
        .slowMsgDmaPtr = NULL,
        .fastDmaChannel = 0,
        .slowDmaChannel = 0,
        .callbackFunc = 
        {
            .function = sentNotification,
            .param = NULL,
        },
        .fastDmaFIFOEnable = false,
        .fastDmaFIFOSize = 0,
        .channelConfig = (const sent_channel_config_t *)sentChannelConfig,
        .numOfConfigs = 2,
    };
    
    sent_state_t sentState;
    

    我使用tick为1us,Fast Message Nibbles为5的报文。
    输入波形如图所示
    6af9b22f-9805-47db-8df8-5b514ead96c4-image.png

    我的单片机无法检测到sent报文的存在,并且无法定位错误。
    测试主函数如下

    /* USER CODE BEGIN Header */
    /* you can remove the copyright */
    /*
     *  Copyright 2020-2024 Yuntu Microelectronics co.,ltd
     *  All rights reserved.
     * 
     *  YUNTU Confidential. This software is owned or controlled by YUNTU and may only be
     *  used strictly in accordance with the applicable license terms. By expressly
     *  accepting such terms or by downloading, installing, activating and/or otherwise
     *  using the software, you are agreeing that you have read, and that you agree to
     *  comply with and are bound by, such license terms. If you do not agree to be
     *  bound by the applicable license terms, then you may not retain, install,
     *  activate or otherwise use the software. The production use license in
     *  Section 2.3 is expressly granted for this software.
     * 
     * @file main.c
     * @brief 
     * 
     */
    
    /* USER CODE END Header */
    #include "sdk_project_config.h"
    /* Includes ------------------------------------------------------------------*/
    
    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    /* USER CODE END Includes */
    
    /* Private typedef -----------------------------------------------------------*/
    /* USER CODE BEGIN PTD */
    /* USER CODE END PTD */
    
    /* Private define ------------------------------------------------------------*/
    /* USER CODE BEGIN PD */
    /* USER CODE END PD */
    
    /* Private macro -------------------------------------------------------------*/
    /* USER CODE BEGIN PM */
    /* USER CODE END PM */
    
    /* Private variables ---------------------------------------------------------*/
    /* USER CODE BEGIN PV */
    /* USER CODE END PV */
    
    /* Private function declare --------------------------------------------------*/
    /* USER CODE BEGIN PFDC */
    /* USER CODE END PFDC */
    static void Board_Init(void);
    
    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    /* Define receive buffer */
    flexcan_msgbuff_t rxStdMsg;
    flexcan_msgbuff_t rxExtMsg;
    /* Prepare message to be sent */
    #define RX_STD_MSG_ID (0x02UL)
    #define RX_STD_MAILBOX (0x00UL)
    #define RX_EXTMSG_ID (0x70012UL)
    #define RX_EXT_MAILBOX (0x02UL)
    #define TX_MSG_ID (0x03UL)
    #define TX_MAILBOX (0x01UL)
    
    
    flexcan_msgbuff_t txMsg = {
        .cs = 0U,
        .msgId = TX_MSG_ID,
        .data[0] = 0x00,
        .dataLen = 1U,
    };
    const flexcan_data_info_t rxMbExtInfo = {
        .msg_id_type = FLEXCAN_MSG_ID_STD,
        .data_length = 8,
        .fd_enable = false,
        .fd_padding = 0,
        .enable_brs = false,
        .is_remote = false,
    };
    const flexcan_data_info_t rxMbStdInfo = {
        .msg_id_type = FLEXCAN_MSG_ID_STD,
        .data_length = 8,
        .fd_enable = false,
        .fd_padding = 0,
        .enable_brs = false,
        .is_remote = false,
    };
    const flexcan_data_info_t txMbStdInfo = {
        .msg_id_type = FLEXCAN_MSG_ID_STD,
        .data_length = 8,
        .fd_enable = false,
        .fd_padding = 0,
        .enable_brs = false,
        .is_remote = false,
    };
    
    
    #define SENT_INST     (0)
    
    sent_fast_msg_t fastMessage[SENT_CH_COUNT];
    sent_slow_msg_t slowMessage[SENT_CH_COUNT];
    sent_event_t activeEvents[SENT_CH_COUNT];
    
    uint32_t fast_msg_cnt [SENT_CH_COUNT] = {0, 0};
    uint32_t slow_msg_cnt [SENT_CH_COUNT] = {0, 0};
    uint32_t error_msg_cnt[SENT_CH_COUNT] = {0, 0};
    uint32_t error_msg_sts[SENT_CH_COUNT] = {0, 0};
    
    /* Callback for SENT handler */
    void sentNotification(uint32_t instance, uint32_t channel, sent_callback_type_t type, void * param)
    {
        (void)param;
        switch(type)
        {
            case SENT_CALLBACK_SLOW_DMA_RX_COMPLETE:
                break;
    
            case SENT_CALLBACK_FAST_DMA_RX_COMPLETE:
                break;
    
            case SENT_CALLBACK_SLOW_RX_COMPLETE:
                SENT_DRV_GetSlowMsg(instance, channel, &slowMessage[channel]);
                slow_msg_cnt[channel]++;
                break;
    
            case SENT_CALLBACK_FAST_RX_COMPLETE:
                SENT_DRV_GetFastMsg(instance, channel, &fastMessage[channel]);
                fast_msg_cnt[channel]++;
                break;
    
            case SENT_CALLBACK_RX_ERROR:
                SENT_DRV_GetEvents(instance, channel, &activeEvents[channel]);
                error_msg_cnt[channel]++;
                break;
    
            default:
                break;
        }
    }
    
    /* Printf current slow message and short message */
    void sent_print_msg(uint8_t ch)
    {
    	uint8_t A = 0;
        if (SENT_SLOW_TYPE_SHORT == slowMessage[ch].type)
        {
    			A++;
        }
        else if (SENT_SLOW_TYPE_ENHANCED_4_BIT == slowMessage[ch].type)
        {
    			A++;
        }
        else if (SENT_SLOW_TYPE_ENHANCED_8_BIT == slowMessage[ch].type)
        {
    			A++;
        }
    }
    
    
    /* USER CODE END 0 */
    
    
    /**
     * @brief  The application entry point.
     * @retval int
     */
    int main(void)
    {
        /* USER CODE BEGIN 1 */
    		status_t status = STATUS_SUCCESS;
        uint8_t canRxFrameCnt = 0;
        /* Initialize clocks*/
        status |= CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                                 g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
        status |= CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
        if (status != STATUS_SUCCESS)
        {
            return STATUS_ERROR;
        }
        /* USER CODE END 1 */ 
        Board_Init();
        /* USER CODE BEGIN 2 */
    		PINS_DRV_WritePin(GPIOE,2,0);
    		 /* Initialize pins */
        status |= PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);
    		
    		PINS_DRV_WritePin(GPIOE,2,0);
    		
    		status |= FLEXCAN_DRV_Init(flexcanInitConfig0_INST, &flexcanInitConfig0_State, &flexcanInitConfig0);
        status |= FLEXCAN_DRV_ConfigRxMb(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxMbStdInfo, RX_STD_MSG_ID);
        status |= FLEXCAN_DRV_ConfigRxMb(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxMbExtInfo, RX_EXTMSG_ID);
    		
    //		 /* Start receiving data in RX_STD_MAILBOX. */
        status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxStdMsg);
        status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxExtMsg);
    		
    		
    		/* Initialize SENT */
    		status |= SENT_DRV_Init(SENT_INST, &sentUserConfig, &sentState);
    		
    		OSIF_TimeDelay(1000);
    		
        /* USER CODE END 2 */
    
        /* Infinite loop */
        /* USER CODE BEGIN WHILE */
        while (1)
        {
            /* USER CODE END WHILE */
            /* USER CODE BEGIN 3 */
    				txMsg.data[0]++;
    				if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, TX_MAILBOX) != STATUS_BUSY)
    				{
    						status |= FLEXCAN_DRV_Send(flexcanInitConfig0_INST, TX_MAILBOX, &txMbStdInfo, TX_MSG_ID, txMsg.data);
    				}
    				if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, RX_STD_MAILBOX) != STATUS_BUSY)
    				{
    						canRxFrameCnt++;
    						/* Start receiving data in RX_STD_MAILBOX. */
    						status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxStdMsg);
    				}
    				if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, RX_EXT_MAILBOX) != STATUS_BUSY)
    				{
    						canRxFrameCnt++;
    						/* Start receiving data in RX_STD_MAILBOX. */
    						status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxExtMsg);
    				}
    
    					if (canRxFrameCnt >= 10)
    					{
    							break;
    					}
    					
    					sent_print_msg(0);
    					sent_print_msg(1);
    				 OSIF_TimeDelay(100);
        }
    		 for (;;)
        {
            if (status != STATUS_SUCCESS)
            {
                break;
            }
        }
    		return status;
    		
        /* USER CODE END 3 */
    }
    
    static void Board_Init(void)
    {
    }
    
    /* USER CODE BEGIN 4 */
    /* USER CODE END 4 */
    
    

    能否提供更详细的说明文档,感谢。

    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      写于 最后由 编辑
      #2

      目前 SENT 模块可以识别如下报文
      image.png

      hamsterH 1 条回复 最后回复
      1
      • hamsterH 离线
        hamsterH 离线
        hamster
        在 回复了 Diga 最后由 编辑
        #3

        Diga 在 YTM32B1MD14GMLHT配置SENT检测不到报文 中说:

        目前 SENT 模块可以识别如下报文
        image.png

        您的意思是只支持数据段数量为3的快速帧?

        1 条回复 最后回复
        0
        • DigaD 离线
          DigaD 离线
          Diga
          写于 最后由 编辑
          #4

          不是
          你可以把你的 SENT 波形发一下,.dsl

          hamsterH 1 条回复 最后回复
          0
          • hamsterH 离线
            hamsterH 离线
            hamster
            在 回复了 Diga 最后由 hamster 编辑
            #5

            Diga 在 YTM32B1MD14GMLHT配置SENT检测不到报文 中说:

            不是
            你可以把你的 SENT 波形发一下,.dsl
            非常感谢您的回复,抓取的波形如下,我的sent协议是SPC带触发的触发为17个tick的低电平,tick = 1us,数据段为4个字节。
            [f2c5ca14-0980-454a-8db1-767fefe53432-DSLogic-la-250521-092604.dsl](无效文件格式,允许的格式有:.png, .jpg, .bmp, .txt, .webp, .webm, .mp4, .gif, .hex, .bin, .s19, .elf, .zip, .patch, .pdf, .yct, .jpeg)
            .dsl格式文件好像无法上传,所以我压缩了下。DSLogic-la-250521-092604.zip

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

              你把 SENT 的配置中的 Tick Duration 改为 1,Nibble 个数改为 4 再试试

              image.png

              https://forum.ytmicro.com/topic/365/使用-ytm32b1ha01-实现-spc-通信

              hamsterH 1 条回复 最后回复
              0
              • hamsterH 离线
                hamsterH 离线
                hamster
                在 回复了 Diga 最后由 编辑
                #7

                Diga 在 YTM32B1MD14GMLHT配置SENT检测不到报文 中说:

                你把 SENT 的配置中的 Tick Duration 改为 1,Nibble 个数改为 4 再试试

                image.png

                https://forum.ytmicro.com/topic/365/使用-ytm32b1ha01-实现-spc-通信

                非常感谢您的帮助,我解决了我的问题,我犯了一个非常愚蠢的问题,我的配置都没有什么问题,只是因为忘了配置sent的引脚。

                1 条回复 最后回复
                0

              • 云途开发生态介绍

                快速上手云途开发生态

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YT CONFIG TOOL调查问卷

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

              • can
                20
                demo
                20
                uds
                13
                lin stack
                10
                md14
                6
                fbl
                5
                yt-link
                5
                adc模块
                4
                Online Users
                limanjiangL
                limanjiang
                YQHY
                YQH
                z123456111Z
                z123456111
                FrankieF
                Frankie
                frankieqqF
                frankieqq
                ColinC
                Colin
                AlexzA
                Alexz
                HAIYANGH
                HAIYANG
                SelinhuangS
                Selinhuang
                PedroCaoP
                PedroCao
                majorM
                major
                车友车行车
                车友车行
                zhaodong1Z
                zhaodong1
                jinyiJ
                jinyi
                yt0503Y
                yt0503
                runR
                run
                • 登录

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