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

YunTu Forum

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

YTM32B1MD14GMLHT配置SENT检测不到报文

已定时 已固定 已锁定 已移动 YTM32B1M系列
sent
7 帖子 2 发布者 72 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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

                发帖前请查看

              • YCT离线License申请流程

                帮助没办法联网的电脑使用YCT

              • YT CONFIG TOOL调查问卷

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

              • demo
                12
                can
                8
                lin stack
                6
                yt-link
                5
                vscode
                3
                adc模块
                2
                i2c
                2
                uuid
                2
                Online Users
                XgqX
                Xgq
                gaoShengG
                gaoSheng
                mcM
                mc
                nuseavaN
                nuseava
                BillYinB
                BillYin
                • 登录

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