This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCAN4550:TMDX570LC43HDK 轮询方法或中断方法中的 TCAN4550 SPI 至 CANFD

Guru**** 668880 points
Other Parts Discussed in Thread: TMS570LC4357, TCAN4550, MSP430FR6989, TMS570LS1224, TCAN4550-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1018918/tcan4550-tcan4550-spi-to-canfd-in-tmdx570lc43hdk-polling-method-or-interrupt-method

器件型号:TCAN4550
主题中讨论的其他器件:TMS570LC4357MSP430FR6989TMS570LS1224

大家好、

我需要 支持 TCAN4550 BOOSTXL - CANFD-LIN 配置、以便通过 TMS570LC4357发送和接收 CANFD。

中断方法在 Launchpad 中工作正常、但我需要使用轮询方法或仅使用 nINT 引脚的中断方法检查自定义电路板。

nINT - GIOB[6]

CAN_RST -  N2HET1[11]

SPI3_NCS0

SPI3_SIMO

SPI3_SOMI

SPI3_CLK

 

 必须在 TCAN4550中使用 CAN_GPIO1_INT 和 CAN_GPIO2_INT 吗?

GIOA[0]- CAN_GPIO1_INT 和 GIOA[1]- CAN_GPIO2_INT

针对不使用 nINT 的轮询方法的 TMS570LCx MCU 的任何示例代码。  

和中断方法在  TCAN4550中仅使用 nINT 而不使用 CAN_GPIO1_INT 和 CAN_GPIO2_INT?

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、  

    TCAN4550有一个专用中断引脚(引脚8、nINT)、此引脚反映全局中断状态标志的状态。 可以配置为 GPIO1和 GPO2的中断受限于特定的中断状态、因此不能用于通用中断检测。  

    有关如何使用基于中断的方法的示例、建议查看 器件存储页面上为 MSP430FR6989编写的 TCAN4550演示软件。 这里的 main.c 文件有一个中断矢量、该矢量定义为每次 nINT 信号从高电平转换为低电平时运行、表示 TCAN4550发出中断信号。 这可以唤醒 MCU、以便它可以开始识别和处理中断。  

    如果您对本演示或 TCAN4550的 nINT 函数有疑问、敬请告知。  

    此致、
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott1:

    我已经查看并使用了 TMS570LS1224_TCAN4550_Demo_Node1代码 、并检查了 CANFD 信号的传输是否正常、但我无法获取多个信号的接收信号、如所示  

    传输  

    请帮我查询初始化设置的轮询方法以及 CAN 信号的传输和接收。

    MCAN_WriteTXFIFO 函数用作轮询方法参数 是否为 FIFO 编号?

    在上面的代码中、我使用了 FIFONumber、它是0和1、所以  

     AHB_WRITE_B_FL_32 (M_CAN_TXBAR、0x00000003);   

    0x00000003是位0、位1正在发送信号 是否正确?

    如何接收多个 CAN 信号  

    在这里,我只使用 RXFIFO 作为0来表示所有消息,我无法正确读取 和读取信号。

    TCAN45x_Init.c 文件此处启用了 m_CAN_INT1、这意味着 GPO2被选中中断。  

    SFID1的作用是根据下图对 CAN 信号进行滤波的作用是什么?0x158那么我只能给出0x148、0x118、0x140、0x110、0x048、0x040的信号、但是信号不应该是0x284、0x424是正确的?

    我无法读取此 CAN 信号0x284和0x424是否正确?

     

    提前感谢。

    请尽快答复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:  

    我收到一个编译器错误、指示符"header"未定义、但已定义。

    TCAN45x0_TX_HEADER 在 TCAN45x.h 中定义了结构该文件包括在内  

    在接收 CAN 信号时、RXFIFO 缓冲器0和缓冲器1的多个 CAN 信号不正确。  

    如何使用 TMS570LC4357在 TCAN4550中移位 FIFO 以进行下一次 RXFIFO 读取。

    请帮助我解决此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Santhosh、

    我只是想给你一个更新、告诉你我们正在研究这个问题、并将在周一的周末之后回复。 感谢您的耐心等待。

    此致、

    Eric Hackett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 

    我需要 根据定制板配置 TCAN45x_devConfig 函数。

    TCAN45x_devConfig
    LaunchPad
    MCU TCAN45x 板
    GPIOA-- BIT0-- nINT
    GPIOA -- BITT 1 -- GPO2
    GPIOA --位7 -- GPIO1
    GPIOB --位3 -- GPIO 复位
    SPI3 -- NCS_2 -- NCS_0

    我已经配置了代码、请检查并确认、但代码无法正常工作。

    定制板
    MCU TCAN45x 板
    GPIOA-- XX -- nINT
    GPIOA-- XX -- GPO2
    GPIOB --位-- GPIO1
    N2HET1 --位-- GPIO 复位
    SPI3 -- NCS_0 -- NCS_0

    我已根据定制板配置了代码、但仍然无法正常工作  

    请尽快检查并确认我。

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 

    我已经为 nINT [TCAN45x]的 GIOA[0]和 GPIO1[TCAN45x]的 GIOB[6]尝试了此配置

    如果我将 GPIO1更改为 GIOB[6]、则它不起作用、但它与 GIOA[7]一起工作、但与软件中的 GIOB[6]配置相同。

    除了 TCAN45x_devConfig 函数之外、代码中的任何位置都是为 GIOA[7]硬编码的吗?

    hw_config.h 文件有一些定义  

    /**/
    #define CAN_nINT_PIN         GIOA0
    #define CAN_GPIO2_PIN        GIOA1
    #define CAN_nWRKQ_PIN       GIOA2
    #define CAN_GPIO1_PIN        GIOB6//GIOA7
    #define CAN_RST              GIOB3

    但该定义在代码中的任何位置都不使用。

    void TCAN45x_devConfig()
    {
        gioPORTA->DIR     = (uint32)((uint32)0U << 0U);     /* Bit 0/1/2/7 */
        gioREG->POL       = (uint32)((uint32)0x0U << 0U);   /* Bit 0/1, falling edge */
        gioREG->LVLSET    = (uint32)((uint32)(0x01|0x4000));   /* GIOA Bit 0/1/2/7, GIOB Bit 2, high priority interrupt */
        gioPORTA->PULDIS  = 0x01; /* Bit 0/1/2/7, disable the pull */
        gioPORTB->PULDIS  = 0x40; /* Bit 2, disable the pull */
        gioEnableNotification(gioPORTA, 0x01); //enable the INT on GIOA0,GIOA1,GIOA2,GIOA7
        gioEnableNotification(gioPORTB, 0x40); //enable the INT on GIOB2, user button input
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 

    如何生成多个发送 CANFD 和多个接收信号。

    如果发送为2,那么我需要将 M_CAN_TXBAR 3从1更改为1?

    AHB_WRITE_B_FL_32 (M_CAN_TXBAR、0x0000000003);  

    同样,如何使用 MCAN_ReadNextFIFO 读取多个接收 CANFD 信号?

            if(1)
    		{
                MCAN_WriteTXFIFO(0, &header1, &g_ucADC1Data[g_ucCurrentAdcDataIndex][0]);  
                AHB_WRITE_B_FL_32(M_CAN_TXBAR, 0x0000000001);
    		}
    			TCAN45x0_CAN_Interrupt_Register MCAN_IR = {0};  // Setup a new MCAN IR object for easy interrupt checking
                MCAN_ReadInterruptRegister(&MCAN_IR);           // Read the interrupt register
                //if (MCAN_IR.RF0N) {                     // If a new message in RX FIFO 0
                    TCAN45x0_RX_HEADER MsgHeader = {0}; // Initialize to 0 or you'll get garbage
                    uint8_t numBytes = 0;
                    uint8_t dataPayload[64] = {0};
                    numBytes = MCAN_ReadNextFIFO( 0, &MsgHeader, dataPayload);    // This will read the next element in the RX FIFO 0
    				if (MsgHeader.ID == 0x148)
    				{ 
    					TMS570_DEBUGF(("Received CAN-FD Data: 0x%x bytes\n", numBytes));
    					for(i=0; i<numBytes; i++){
    						TMS570_DEBUGF(("  0x%X     ", dataPayload[i]));
    					}
    					TMS570_DEBUGF(("  \n\n "));
    				}
    

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 

    如何生成多个发送 CANFD 和多个接收信号。

    如果发送为2,那么我需要将 M_CAN_TXBAR 3从1更改为1?

    AHB_WRITE_B_FL_32 (M_CAN_TXBAR、0x0000000003);  

    同样,如何使用 MCAN_ReadNextFIFO 读取多个接收 CANFD 信号?

    TCAN45x0_CAN_Interrupt_Register MCAN_IR = {0};  // Setup a new MCAN IR object for easy interrupt checking
                MCAN_ReadInterruptRegister(&MCAN_IR);           // Read the interrupt register
                //if (MCAN_IR.RF0N) {                     // If a new message in RX FIFO 0
                    TCAN45x0_RX_HEADER MsgHeader = {0}; // Initialize to 0 or you'll get garbage
                    uint8_t numBytes = 0;
                    uint8_t dataPayload[64] = {0};
                    numBytes = MCAN_ReadNextFIFO( 0, &MsgHeader, dataPayload);    // This will read the next element in the RX FIFO 0
    				if (MsgHeader.ID == 0x148)
    				{ 
    					TMS570_DEBUGF(("Received CAN-FD Data: 0x%x bytes\n", numBytes));
    					for(i=0; i<numBytes; i++){
    						TMS570_DEBUGF(("  0x%X     ", dataPayload[i]));
    					}
    					TMS570_DEBUGF(("  \n\n "));
    				}

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 

    我不确定使用 RXFIFO 0和 RXFIFO 1只能使用 RX FIFO 和 RX 缓冲器来读取多个 CAN FD 信号。

    我无法在索引处读取 FIFO 的 RXF1S 寄存器  

    我在下面共享了我的代码、请检查它、并告诉我如何修改以读取多个 CANFD 信号。

    config_value_type_t CFGTYP;
    CFGTYP = CurrentValue;
    TCAN45x0_Device_config_reg_t DEV_REG = {0};
    MCAN_GetDevConfigValue(&DEV_REG, CFGTYP);
    TCAN45x0_MCAN_config_reg_t MCAN_REG ={0};
    MCAN_GetMRAMConfigValue(&MCAN_REG, CFGTYP);
    TCAN45x0_CAN_Interrupt_Register MCAN_IR = {0};  // Setup a new MCAN IR object for easy interrupt checking
    MCAN_ReadInterruptRegister(&MCAN_IR);           // Read the interrupt register
    if (MCAN_IR.RF0N) {                     // If a new message in RX FIFO 0
     TCAN45x0_RX_HEADER MsgHeader = {0}; // Initialize to 0 or you'll get garbage
     TCAN45x0_RX_HEADER MsgHeader1 = {0}; // Initialize to 0 or you'll get garbage
     uint8_t numBytes = 0;
     uint8_t numBytes1 = 0;
     uint8_t dataPayload[64] = {0};
     uint8_t dataPayload1[64] = {0};
     TCAN45x0_MCAN_config_reg_t MCAN_REG ={0};
     MCAN_GetMRAMConfigValue(&MCAN_REG, CFGTYP);
     numBytes = MCAN_ReadNextFIFO( RXFIFO0, &MsgHeader, dataPayload);    // This will read the next element in the RX FIFO 0
    
     numBytes1 = MCAN_ReadNextFIFO( 1, &MsgHeader1, dataPayload1);    // This will read the next element in the RX FIFO 0
     if (MsgHeader.ID == 0x148)
     { 
     	TMS570_DEBUGF(("\nReceived CAN-FD ID is 0x%x \t Data: 0x%x bytes\n", MsgHeader.ID,numBytes));
     	for(i=0; i<numBytes; i++){
     		TMS570_DEBUGF(("0x%X\t", dataPayload[i]));
     	}
     	TMS570_DEBUGF(("  \n\n "));
     }
     if (MsgHeader1.ID == 0x118)
     {
         TMS570_DEBUGF(("\nReceived CAN-FD ID is 0x%x \t Data: 0x%x bytes\n", MsgHeader1.ID,numBytes1));
         for(i=0; i<MsgHeader1.ID; i++){
             TMS570_DEBUGF(("0x%X\t", dataPayload1[i]));
         }
     }
    }

    请尽快回复我。

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、

    默认情况 下、任何接收到的与现有 ID 滤波器不匹配的消息都将存储在 RXFIFO0中(请参阅 TCAN4x5x_MCAN_Global_Filter_Configuration)。 此 FIFO 中的新消息将由  MCAN_IR.RF0N 中断指示。 如果滤波器已配置为在  RXFIFO1中存储接收到的具有特定 ID 的消息、则新消息将通过  MCAN_IR.RF1N 中断指示。  使用两个 FIFO 接收消息的伪代码如下所示:

    // define receive variables
    TCAN45x0_RX_HEADER MsgHeader = {0};
    uint8_t dataPayload1[64] = {0};
    uint8_t numBytes = 0;
    
    // if message received in RXFIFO0
    if (MCAN_IR.RF0N) { 
    	// Read RXFIFO0
    	numBytes = MCAN_ReadNextFIFO( RXFIFO0, &MsgHeader, dataPayload);
    }
    // if message received in RXFIFO1
    else if (MCAN_IR.RF1N) { 
    	// Read RXFIFO1
    	numBytes = MCAN_ReadNextFIFO( RXFIFO1, &MsgHeader, dataPayload);
    }
    
    // handle received message
    if(MsgHeader.ID == 0x48) {
    	// handle case
    }
    else if(MsgHeader.ID == 0x118) {
    	// handle case
    }
    

    此致、
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Eric Schott:

    是的、我已经为 CAN ID 接收信号配置了 SID 滤波器。

        TCAN45x0_SID_FILTER SID_ID = {0};
        SID_ID.SFT = TCAN45x0_SID_SFT_CLASSIC;                  
        SID_ID.SFEC = TCAN45x0_SID_SFEC_PRIORITYSTORERX0;       
        SID_ID.SFID1 = 0x0D5;                                   
        SID_ID.SFID2 = 0x7FF;                                   
        MCAN_WriteSIDFilter(0, &SID_ID);                        
    
        TCAN45x0_SID_FILTER SID_ID1 = {0};
        SID_ID1.SFT = TCAN45x0_SID_SFT_CLASSIC;                 
        SID_ID1.SFEC = TCAN45x0_SID_SFEC_PRIORITYSTORERX1;      
        SID_ID1.SFID1 = 0x77F;                                  
        SID_ID1.SFID2 = 0x7FF;                                  
        MCAN_WriteSIDFilter(1, &SID_ID1); 

    SID_ID:SFID1 = 0x0D5将允许041和0D5

    SID_ID1:SFID1 = 0x77F 将允许473、34A 和344

    RXFIFO 0和 RXFIFO 1的代码  

    接收 SCI UART 输出的输出仅为0x041 CAN 信号。

    请帮助我找到问题、为什么我无法在接收端获取另一个 CAN ID 信号

    我是否需要修改 TCAN4x5x Init 设置?

    提前感谢。

    此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、

    MRAM 是否已配置为存储两个 SID 过滤器? 演示代码只分配一个 SID 和一个 XID 滤波器元素(下面的第12 - 13行)。 由于您使用两个 SID 滤波器元素、因此需要对其进行调整。 未使用的 XID 滤波器元素也应未分配、因为未配置的元素可能会导致未定义的行为。  

    还要确保 FIFO 元件已正确配置、以存储接收到的数据。  

    	/* ************************************************************************
    	 * In the next configuration block, we will set the MCAN core up to have:
    	 *   - 1 SID filter element
    	 *   - 1 XID Filter element
    	 *   - 5 RX FIFO 0 elements
    	 *   - RX FIFO 0 supports data payloads up to 64 bytes
    	 *   - RX FIFO 1 and RX Buffer will not have any elements, but we still set their data payload sizes, even though it's not required
    	 *   - No TX Event FIFOs
    	 *   - 2 Transmit buffers supporting up to 64 bytes of data payload
    	 */
    	TCAN4x5x_MRAM_Config MRAMConfiguration = {0};
    	MRAMConfiguration.SIDNumElements = 1;						// Standard ID number of elements, you MUST have a filter written to MRAM for each element defined
    	MRAMConfiguration.XIDNumElements = 1;						// Extended ID number of elements, you MUST have a filter written to MRAM for each element defined
    	MRAMConfiguration.Rx0NumElements = 5;						// RX0 Number of elements
    	MRAMConfiguration.Rx0ElementSize = MRAM_64_Byte_Data;		// RX0 data payload size
    	MRAMConfiguration.Rx1NumElements = 0;						// RX1 number of elements
    	MRAMConfiguration.Rx1ElementSize = MRAM_64_Byte_Data;		// RX1 data payload size
    	MRAMConfiguration.RxBufNumElements = 0;						// RX buffer number of elements
    	MRAMConfiguration.RxBufElementSize = MRAM_64_Byte_Data;		// RX buffer data payload size
    	MRAMConfiguration.TxEventFIFONumElements = 0;				// TX Event FIFO number of elements
    	MRAMConfiguration.TxBufferNumElements = 2;					// TX buffer number of elements
    	MRAMConfiguration.TxBufferElementSize = MRAM_64_Byte_Data;	// TX buffer data payload size

    您在上面共享的输出似乎与最近的代码文章中显示的字符串不一致。 您是否可以共享更新的输出? 最好知道这些消息中的每一条都在访问哪个 FIFO。  

    此致、
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott:

    感谢您的回答。  

    我尝试 配置以存储两个 SID 过滤器

    如何  正确配置 FIFO 元素以存储接收到的数据。

    RXFIFO 0配置为  

    我正在接收 RXFIFO 0数据0x055和0x54,但它也允许0x474在 RXFIFO 中的实现方式是怎样的?

    SFID1 = 0x0D5

    SFID2 = 0x7FF

    匹配的应为0x051和0x0C5。  

    不匹配 的应为0x474。

    RXFIFO1缓冲器中的 RF1N 没有更新  

    请与我分享 RXFIFO 缓冲区更新的配置?

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Santhosh、

    感谢 Eric Schott 耐心地研究这一点。

    此致、

    Eric Hackett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott:  

    如何 配置为在  RXFIFO1和 RX 缓冲器中接收 CAN 信号。 因为我已经为 RXFIFO 0和 RXFIFO 1配置了 SFD 滤波器、但无法从 RF1N 接收任何 CAN 信号为1、只有在 RF0N 中接收1并接收 CAN 信号。

    如何 配置 这个 MRAM 配置是 SID 和 XID 用于发送和接收 CAN 信号吗?

    Rx0NumElements  用于接收  CAN 信号的数量。  

    Rx0ElementSize 为48字节是否可以分配第1个 CAN 信号从 Rx0ElementSize 的这个0位置开始、第2个 CAN 信号从 Rx0ElementSize 的这个第8个位置开始?

    类似地、在 RxBufNumElements 中要配置。

    RXFIFO1缓冲器中的 RF1N 没有更新  

    请与我分享 RXFIFO1缓冲区和 RXBuffer 的更新配置?

    是否可以同时配置 RXFIFO 和 RXbuffer?

    我们可以通过 TCAN2550芯片接收多少 CAN 信号  

    我们需要接收9个 CAN 信号的 CAN 和 CANFD 组合。 是否可以接收。

    我已经看到发送 CAN 信号限制为10个 CANFD 信号。

    请引导我解决上述疑问。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、  

    此处显示的滤波器配置看起来正确。 这定义了两个标准 ID 滤波器、它们将在 FIFO0中存储接收到的 ID = 0x0D5的帧、在 FIFO1中存储 ID = 0x77F 的帧。 在给定中断处理代码的情况下、0x77F 似乎不是预期接收的 ID。 是否需要将第二个筛选器配置为接受一系列 ID? 如果是、请使用滤波器 SFT 的范围滤波器设置。  

    [引用 userid="478029" URL"~/support/interface-group/interface/f/interface-forum/1018918/tcan4550-tcan4550-spi-to-canfd-in-tmdx570lc43hdk-polling-method-or-interrupt-method/3779450 #3779450"]是否可以同时配置 RXFIFO 和 RXbuffer?

    是的、可以同时配置 RX FIFO 和缓冲器并简单地使用所有这些 FIFO。 RX 滤波器可配置为将接收到的带有特定 ID 的消息发送到这些位置中的每个位置。  

    [引用 userid="478029" URL"~/support/interface-group/interface/f/interface-forum/1018918/tcan4550-tcan4550-spi-to-canfd-in-tmdx570lc43hdk-polling-method-or-interrupt-method/3779450 #3779450"]

    我们可以通过 TCAN2550芯片接收多少 CAN 信号  

    我们需要接收9个 CAN 信号的 CAN 和 CANFD 组合。 是否可以接收。

    [/报价]

    我不知道你在这里是什么意思。 此器件监控 CAN 总线上发送的所有 CAN 帧、因此只要以支持的数据速率发送、它就能够接收所有 CAN 帧。 CAN 协议一次只允许在总线上发送一个帧。 这些帧的发送顺序由使用帧 ID 的仲裁决定(较低的值具有较高的优先级)。  

    [引用 userid="478029" URL"~/support/interface-group/interface/f/interface-forum/1018918/tcan4550-tcan4550-spi-to-canfd-in-tmdx570lc43hdk-polling-method-or-interrupt-method/3779450 #3779450"]我发现发送 CAN 信号仅限于10个 CANFD 信号。

    再说一次、我不确定我在这里是否理解。 您在哪里看到过此限制的定义? 这可能是指特定配置中使用的 TX FIFO 或缓冲器元件数量吗?  

    此致、
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott:

    埃里克·肖特:  

    此处显示的滤波器配置看起来正确。 这定义了两个标准 ID 滤波器、它们将在 FIFO0中存储接收到的 ID = 0x1D5的帧、在 FIFO1中存储 ID = 0x77F 的帧。 在给定中断处理代码的情况下、0x77F 似乎不是预期接收的 ID。 是否需要将第二个筛选器配置为接受一系列 ID? 如果是、请使用滤波器 SFT 的范围滤波器设置。  

    Santhosh Chandramohan

    是的、我有6个 CAN ID 信号来配置 RXFIFO 1 " 0x200至0x600 " CANID。 我现在将尝试在滤波器 SFT 中使用范围滤波器设置。

    Santhosh Chandramohan

    是否可以同时配置 RXFIFO 和 RXbuffer?

    是的、可以同时配置 RX FIFO 和缓冲器并简单地使用所有这些 FIFO。 RX 滤波器可配置为将接收到的带有特定 ID 的消息发送到这些位置中的每个位置。  

    Santhosh Chandramohan

    您能否共享 RXFIFO 0和 RXFIFO 1、以便在配置和代码中使用。 我只需要更改的位置。

    查询:  

    我已经将滤波器设计为 标准滤波器类型 SFT、将2b01设计为双 ID 滤波器、但它工作正常。

    RXFIFO0只允许0x400、RXFIFO 1只允许0x600、但它接受0x100、这也是可能的。

    接收到的 CAN ID 0x400和0x100。 它应该只接受0x400 CANID 信号。

    桑托什·昌德拉霍恩 

    如何只配置两个 CAN ID、一个在 RXFIFO0中、另一个在 RXFIFO1中  

    RXFIFO0中的 CANID 0x200需要读取 、 而 RXFIFO1中的 CANID 0x600需要读取、现在情况更好。  

    请指导我如何配置这两个 CAN 信号、这是一个紧急情况。  

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott:  

    是否可以在此论坛或个人邮件中共享我的项目以查看我的代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric Schott:

    如何只配置两个 CAN ID、一个在 RXFIFO0中、另一个在 RXFIFO1中  

    RXFIFO0中的 CANID 0x407需要读取 、 而 RXFIFO1中的 CANID 0x600需要读取、现在情况更好。  

    请指导我仅配置需要接收 CAN ID 407和600的2个 CANID 信号。  

    更好的方法是 RXbuffer 或 RXFIFO、用于2个 CANID 信号和 CANFD 64字节数据。  

     TCAN45x0_MRAM_Config

    2. SID 过滤器

    3.中断配置

    接收代码。  

    请指导我如何配置这两个 CAN 信号、这是一个紧急情况。  

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Santhosh、

    感谢您来到 E2E、向您提出有关 TCAN4550-Q1的问题、因为这是一款复杂的器件、我们随时为您提供支持。 但是、我们无法完全支持您的软件开发、我觉得这就是该线程所实现的。 Eric Schott 在您开发和设计自己的代码时可以回答问题、但他不能为您审阅和编写代码的整个部分。 代码的用户需要对其进行开发、以便为项目提供长期支持、如果 TI 离开设计软件、我们将无法长期支持该软件。

    再次感谢您的提问、我们随时为您提供支持、但 Eric Schott 没有带宽、TI 也没有资源来支持您的代码、我们会不断审查您的所有更改以及您可能遇到的设计速度波动。 我们强烈建议您使用软件用户指南、演示代码以及在 E2E 上或通过电子邮件提出合理的问题、自行解决其中的一些问题。 我们不能支持一致的软件审查以及为项目编写代码的一部分。

    此致、

    Eric Hackett  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Eric Hackett、

    我在 TCAN4550中有一个直接的问题:接收 CAN ID、RXFIFO 0工作正常、但我无法接收 RXFIFO 1和 RX 缓冲器。 请帮我处理 RXFIFO 1和 RXbuffer 配置的演示代码以及接收代码支持、这已经足够了。

    提前感谢  

    Santhosh Chandramohan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Santhosh、

    明白了、Eric Schott 和我将努力确保您得到良好的响应。 请原谅可能出现的任何延迟、但 我们将在2021年5月8日 CST 日结束前对您作出一些回复。 非常感谢您的理解和耐心。

    此致、

    Eric Hackett  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好 、Eric Hackett 和 Eric Schott、

    我已通过在  TCAN45x 中添加带有 TCAN45x 全局滤波器结构的" TCAN45x0_ConfigureGlobalFilter " API 来解决了主要问题

     它在初始化中在 TCAN45x_Init API 中调用。 现在、SID 滤波器和 RXFIFO 1缓冲器都工作正常。  

    除此之外,还需要将 RX 缓冲器与 RXFIFO 缓冲器一起检查。 需要知道 在 RXFIFO 和 RX 缓冲器中可以同时配置多少 CAN 信号?

    提前感谢

    此致、

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、

    我很高兴听到您能够解决上一个问题。  

    RX 缓冲器可被配置为保持的元件数量范围为0至64个元件。 对于允许的元件数量、RX FIFO 具有相同的范围。 请记住、MRAM 的数量仍然有限(2kB)、因此、例如、如果每个元素配置为64字节、则64个元素将不可能。 相同的存储器需要能够适应滤波器元件、RX FIFO 和缓冲器元件以及 TX FIFO 和缓冲器元件。  

    此致、
    Eric Schott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Eric Schott:

    在本例中、我有3个 CAN 信号需要接收1、64字节数据 CAN 信号2、32字节数据 CAN 信号和3、32字节数据 CAN 信号。 是否可以一次读取全部3个信号?  

    请帮我解决此问题。  

    让我知道有关 CANFD 芯片的任何其他建议、该芯片支持 CANFD 接收10信号、每个信号64字节、CANFD 发送10信号、每个信号64字节相同。 而不是使用 TCAN4550 -Q1

    提前感谢。

    桑托什

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Santhosh、

    RXFIFO 或 RXBUFFER 应配置为保存最大预期有效载荷。 当器件接收到较小的有效载荷时、额外的空间将留空。 接收到的帧将存储数据长度代码、因此您可以在读取前确定有效载荷的大小。  

    我不知道您每次同时接收不同信号意味着什么。 您是否意味着您将从具有不同 ID 或标题的三个不同来源接收数据? 如果是、这是可以的。 CAN 总线是一种串行协议、因此总线上一次只能存在一个帧、因此 TCAN4550能够识别总线上的所有数据。 可以根据帧的 ID 配置这些过滤器、以存储、区分优先级或忽略任何帧。 如果您希望接收三个不同的 ID、每个 ID 可以是唯一的筛选器或具有设置范围的单个筛选器、或者器件可以接受所有帧。  

    此致、
    Eric Schott