cancel
Showing results for 
Search instead for 
Did you mean: 

FDCAN on STM32G491RE: Tx message truncated. 8 bytes sent instead of 12 bytes

Qin1
Associate II

I am using STM32G491RE - NUCLEO. connected to the ADM3055e CAN Transceiver 

Currently I am trying to send 12 Bytes of Data from IXXAT Terminal over to FDCAN1 which receives the message fine and then Output the Message on FDCAN2 though a buffer. So My logic is when a message pass the filter it gets called by the Fifo0Callback and push it to a buffer below. This works fine the buffer also get the full 12Bytes of data same FD format and everything checked out.

But when I try to add the message to HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TxHeader2, TxData2). Where TxData is the dequeued message from the buffer and copys the 12Bytes. The message somehow gets truncated to 8Bytes on output. 

Heck, when I add "if (HAL_FDCAN_GetTxFifoFreeLevel(&hfdcan2) > 0)", It somehow says it is full even when starting the code.

I have been suspecting because I cant set the HAL_FDCAN_ConfigTxBufferElementSize and HAL_FDCAN_ConfigRxBufferElementSize or even the messageRam offset like i could in the STM32H7 series. which may be causing the issue. Any Ideas on what I should do? 

Let me know if you need more information.

@LCE @mƎALLEm 
Thanks in advance! 

void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
	if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET)
	{
		if (hfdcan->Instance == FDCAN2)
		{
...
		}
		else if (hfdcan->Instance == FDCAN1)
		{
			if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader1, RxData1) == HAL_OK)
			{
				uint8_t len = Can_DlcToBytes(RxHeader1.DataLength);
				if (!CanRxBuffer_EnqueueFromISR1(RxHeader1.Identifier, RxData1, len)) {
					FDCAN1_LED_State = LED_FIFO0_ERROR;
				} else {
					FDCAN1_LED_State = LED_STORE_BUFFER;
				}
			}
			else {
				FDCAN1_LED_State = LED_FIFO0_ERROR;
			}
		}

 

14 REPLIES 14
Qin1
Associate II

I did that and still the same result

Qin1_0-1770375336253.png

 

I don't have the device to test and debug. I think at this stage better to create a simple project where you simply send 12 bytes to your analyzer and test. 

You can also try the Loopback mode.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
Qin1
Associate II

Alright I'll do that and let you know how it goes. Thank you for the help @mƎALLEm 

On a side note may I ask how the RAM allocation and Tx / Rx BufferElementSize can be configured on G4 Series. As in cubeMX it doesnt give me the option to like the H7 series. Or is that done automatically by the core? 

Better to separate questions here. Please create another thread for that question.

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.

Ok I found the issue....It's ridiculous simple mistake but it solved my issue.

I realised that when configuring TxHeader FDFormat my mistake was:
TxHeader1.FDFormat = FDCAN_FRAME_FD_BRS;

however it should be 
TxHeader2.FDFormat = FDCAN_FD_CAN;

But anyways that solved my issue.