FLEXCAN bitrate

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

FLEXCAN bitrate

Jump to solution
234 Views
MrShen
Contributor III

Hello, the MCU uses S32K144 and operates with 5V power supply. Currently configuring CAN communication, CAN0 and CAN2 are enabled.

CAN0 is high-speed CAN (TJA1050) at 500K, CAN2 is low-speed CAN (TJA1055T/3). CAN0 is configured at 500K without issues, CAN0->CTRL1 = 0x00DB0006 is 500K.

Now I want to configure CAN2 at 100K, CAN2->CTRL1 = 0x00CF0033, but other CAN devices cannot receive data.

If the CAN bitrate is set to 100K, what should CAN2->CTRL1 be?

Or is it feasible to set TJA1050 to 100K? I also tried setting CAN0 to 100K but it was unsuccessful.

void FLEXCAN2_init(void)
{
#define MSG_BUF_SIZE 4 /* Msg Buffer Size. (CAN 2.0AB: 2 hdr + 2 data= 4 words) */
uint32_t i=0;

PCC->PCCn[PCC_FlexCAN2_INDEX] |= PCC_PCCn_CGC_MASK; /* CGC=1: enable clock to FlexCAN2 */
CAN2->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: Disable module before selecting clock */
CAN2->CTRL1 &= ~CAN_CTRL1_CLKSRC_MASK; /* CLKsrc=0: Clock Source = oscillator (8 MHz) */
CAN2->MCR &= ~CAN_MCR_MDIS_MASK; /* MDIS=0; Enable module config. (Sets FRZ, HALT)*/
while (!((CAN2->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT))
{
/*code*/
}
/* Good practice: wait for FRZACK=1 on freeze mode entry/exit */
CAN2->CTRL1 = 0x00CF0033; /* 0x00DB0006 Configure for 500 KHz bit time 0x00DF000F 125Kbps */
/* Time quanta freq = 16 time quanta x 500 KHz bit time= 8MHz */
/* PRESDIV+1 = Fclksrc/Ftq = 8 MHz/8 MHz = 1 */
/* so PRESDIV = 0 */
/* PSEG2 = Phase_Seg2 - 1 = 4 - 1 = 3 */
/* PSEG1 = PSEG2 = 3 */
/* PROPSEG= Prop_Seg - 1 = 7 - 1 = 6 */
/* RJW: since Phase_Seg2 >=4, RJW+1=4 so RJW=3. */
/* SMP = 1: use 3 bits per CAN sample */
/* CLKsrc=0 (unchanged): Fcanclk= Fosc= 8 MHz */

for(i=0; i<64; i++ ) /* CAN2: clear 16 msg bufs x 4 words/msg buf = 64 words*/
{
CAN2->RAMn[i] = 0; /* Clear msg buf word */
}
for(i=0; i<16; i++ ) /* In FRZ mode, init CAN2 16 msg buf filters */
{
CAN2->RXIMR[i] = 0xFFFFFFFF; /* Check all ID bits for incoming messages */
}
CAN2->RXMGMASK = 0x1FFFFFFF; /* Global acceptance mask: check all ID bits */
CAN2->RAMn[ 4*MSG_BUF_SIZE + 0] = 0x04000000; /* Msg Buf 4, word 0: Enable for reception */
/* EDL,BRS,ESI=0: CANFD not used */
/* CODE=4: MB set to RX inactive */
/* IDE=0: Standard ID */
/* SRR, RTR, TIME STAMP = 0: not applicable */
#ifdef NODE_A /* Node A receives msg with std ID 0x511 */
CAN2->RAMn[ 4*MSG_BUF_SIZE + 1] = 0x14440000; /* Msg Buf 4, word 1: Standard ID = 0x111 */
#else /* Node B to receive msg with std ID 0x555 */
CAN2->RAMn[ 4*MSG_BUF_SIZE + 1] = 0x15540000; /* Msg Buf 4, word 1: Standard ID = 0x555 */
#endif
/* PRIO = 0: CANFD not used */
CAN2->MCR = 0x0000000F; /* Negate FlexCAN2 halt state for 16 MBs */
while ((CAN2->MCR && CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT) {}
/* Good practice: wait for FRZACK to clear (not in freeze mode) */
while ((CAN2->MCR && CAN_MCR_NOTRDY_MASK) >> CAN_MCR_NOTRDY_SHIFT) {}
/* Good practice: wait for NOTRDY to clear (module ready) */
}

Tags (1)
0 Kudos
Reply
1 Solution
209 Views
Julián_AragónM
NXP TechSupport
NXP TechSupport

Hello @MrShen,

You can refer to MPC5xxx/S32Kxx/LPCxxxx: CAN / CAN FD bit timing calculation document. Simply modify the parameters for your setup (e.g. S32K1xx, TJA1050, bitrate + sampling point, etc.), and the tool will provide some configurations for the respective bitrate, along with CAN_CTRL1 values:

Julin_AragnM_0-1778863628803.png

I believe it is feasible to set both transceivers to 100kbps, as TJA1055 supports up to 125kbps.

Best regards,
Julián

View solution in original post

0 Kudos
Reply
1 Reply
210 Views
Julián_AragónM
NXP TechSupport
NXP TechSupport

Hello @MrShen,

You can refer to MPC5xxx/S32Kxx/LPCxxxx: CAN / CAN FD bit timing calculation document. Simply modify the parameters for your setup (e.g. S32K1xx, TJA1050, bitrate + sampling point, etc.), and the tool will provide some configurations for the respective bitrate, along with CAN_CTRL1 values:

Julin_AragnM_0-1778863628803.png

I believe it is feasible to set both transceivers to 100kbps, as TJA1055 supports up to 125kbps.

Best regards,
Julián

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2366087%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EFLEXCAN%20%20bitrate%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2366087%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%20the%20MCU%20uses%20S32K144%20and%20operates%20with%205V%20power%20supply.%20Currently%20configuring%20CAN%20communication%2C%20CAN0%20and%20CAN2%20are%20enabled.%3C%2FP%3E%3CP%3ECAN0%20is%20high-speed%20CAN%20(TJA1050)%20at%20500K%2C%20CAN2%20is%20low-speed%20CAN%20(TJA1055T%2F3).%20CAN0%20is%20configured%20at%20500K%20without%20issues%2C%20CAN0-%26gt%3BCTRL1%20%3D%200x00DB0006%20is%20500K.%3C%2FP%3E%3CP%3ENow%20I%20want%20to%20configure%20CAN2%20at%20100K%2C%20CAN2-%26gt%3BCTRL1%20%3D%200x00CF0033%2C%20but%20other%20CAN%20devices%20cannot%20receive%20data.%3C%2FP%3E%3CP%3EIf%20the%20CAN%20bitrate%20is%20set%20to%20100K%2C%20what%20should%20CAN2-%26gt%3BCTRL1%20be%3F%3CBR%20%2F%3E%3CBR%20%2F%3EOr%20is%20it%20feasible%20to%20set%20TJA1050%20to%20100K%3F%20I%20also%20tried%20setting%20CAN0%20to%20100K%20but%20it%20was%20unsuccessful.%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3CP%3Evoid%20FLEXCAN2_init(void)%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%23define%20MSG_BUF_SIZE%204%20%2F*%20Msg%20Buffer%20Size.%20(CAN%202.0AB%3A%202%20hdr%20%2B%202%20data%3D%204%20words)%20*%2F%3CBR%20%2F%3Euint32_t%20i%3D0%3B%3C%2FP%3E%3CP%3EPCC-%26gt%3BPCCn%5BPCC_FlexCAN2_INDEX%5D%20%7C%3D%20PCC_PCCn_CGC_MASK%3B%20%2F*%20CGC%3D1%3A%20enable%20clock%20to%20FlexCAN2%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BMCR%20%7C%3D%20CAN_MCR_MDIS_MASK%3B%20%2F*%20MDIS%3D1%3A%20Disable%20module%20before%20selecting%20clock%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BCTRL1%20%26amp%3B%3D%20~CAN_CTRL1_CLKSRC_MASK%3B%20%2F*%20CLKsrc%3D0%3A%20Clock%20Source%20%3D%20oscillator%20(8%20MHz)%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BMCR%20%26amp%3B%3D%20~CAN_MCR_MDIS_MASK%3B%20%2F*%20MDIS%3D0%3B%20Enable%20module%20config.%20(Sets%20FRZ%2C%20HALT)*%2F%3CBR%20%2F%3Ewhile%20(!((CAN2-%26gt%3BMCR%20%26amp%3B%20CAN_MCR_FRZACK_MASK)%20%26gt%3B%26gt%3B%20CAN_MCR_FRZACK_SHIFT))%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%2F*code*%2F%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%2F*%20Good%20practice%3A%20wait%20for%20FRZACK%3D1%20on%20freeze%20mode%20entry%2Fexit%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BCTRL1%20%3D%200x00CF0033%3B%20%2F*%200x00DB0006%20Configure%20for%20500%20KHz%20bit%20time%200x00DF000F%20125Kbps%20*%2F%3CBR%20%2F%3E%2F*%20Time%20quanta%20freq%20%3D%2016%20time%20quanta%20x%20500%20KHz%20bit%20time%3D%208MHz%20*%2F%3CBR%20%2F%3E%2F*%20PRESDIV%2B1%20%3D%20Fclksrc%2FFtq%20%3D%208%20MHz%2F8%20MHz%20%3D%201%20*%2F%3CBR%20%2F%3E%2F*%20so%20PRESDIV%20%3D%200%20*%2F%3CBR%20%2F%3E%2F*%20PSEG2%20%3D%20Phase_Seg2%20-%201%20%3D%204%20-%201%20%3D%203%20*%2F%3CBR%20%2F%3E%2F*%20PSEG1%20%3D%20PSEG2%20%3D%203%20*%2F%3CBR%20%2F%3E%2F*%20PROPSEG%3D%20Prop_Seg%20-%201%20%3D%207%20-%201%20%3D%206%20*%2F%3CBR%20%2F%3E%2F*%20RJW%3A%20since%20Phase_Seg2%20%26gt%3B%3D4%2C%20RJW%2B1%3D4%20so%20RJW%3D3.%20*%2F%3CBR%20%2F%3E%2F*%20SMP%20%3D%201%3A%20use%203%20bits%20per%20CAN%20sample%20*%2F%3CBR%20%2F%3E%2F*%20CLKsrc%3D0%20(unchanged)%3A%20Fcanclk%3D%20Fosc%3D%208%20MHz%20*%2F%3CBR%20%2F%3E%3CBR%20%2F%3Efor(i%3D0%3B%20i%26lt%3B64%3B%20i%2B%2B%20)%20%2F*%20CAN2%3A%20clear%2016%20msg%20bufs%20x%204%20words%2Fmsg%20buf%20%3D%2064%20words*%2F%3CBR%20%2F%3E%7B%3CBR%20%2F%3ECAN2-%26gt%3BRAMn%5Bi%5D%20%3D%200%3B%20%2F*%20Clear%20msg%20buf%20word%20*%2F%3CBR%20%2F%3E%7D%3CBR%20%2F%3Efor(i%3D0%3B%20i%26lt%3B16%3B%20i%2B%2B%20)%20%2F*%20In%20FRZ%20mode%2C%20init%20CAN2%2016%20msg%20buf%20filters%20*%2F%3CBR%20%2F%3E%7B%3CBR%20%2F%3ECAN2-%26gt%3BRXIMR%5Bi%5D%20%3D%200xFFFFFFFF%3B%20%2F*%20Check%20all%20ID%20bits%20for%20incoming%20messages%20*%2F%3CBR%20%2F%3E%7D%3CBR%20%2F%3ECAN2-%26gt%3BRXMGMASK%20%3D%200x1FFFFFFF%3B%20%2F*%20Global%20acceptance%20mask%3A%20check%20all%20ID%20bits%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BRAMn%5B%204*MSG_BUF_SIZE%20%2B%200%5D%20%3D%200x04000000%3B%20%2F*%20Msg%20Buf%204%2C%20word%200%3A%20Enable%20for%20reception%20*%2F%3CBR%20%2F%3E%2F*%20EDL%2CBRS%2CESI%3D0%3A%20CANFD%20not%20used%20*%2F%3CBR%20%2F%3E%2F*%20CODE%3D4%3A%20MB%20set%20to%20RX%20inactive%20*%2F%3CBR%20%2F%3E%2F*%20IDE%3D0%3A%20Standard%20ID%20*%2F%3CBR%20%2F%3E%2F*%20SRR%2C%20RTR%2C%20TIME%20STAMP%20%3D%200%3A%20not%20applicable%20*%2F%3CBR%20%2F%3E%23ifdef%20NODE_A%20%2F*%20Node%20A%20receives%20msg%20with%20std%20ID%200x511%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BRAMn%5B%204*MSG_BUF_SIZE%20%2B%201%5D%20%3D%200x14440000%3B%20%2F*%20Msg%20Buf%204%2C%20word%201%3A%20Standard%20ID%20%3D%200x111%20*%2F%3CBR%20%2F%3E%23else%20%2F*%20Node%20B%20to%20receive%20msg%20with%20std%20ID%200x555%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BRAMn%5B%204*MSG_BUF_SIZE%20%2B%201%5D%20%3D%200x15540000%3B%20%2F*%20Msg%20Buf%204%2C%20word%201%3A%20Standard%20ID%20%3D%200x555%20*%2F%3CBR%20%2F%3E%23endif%3CBR%20%2F%3E%2F*%20PRIO%20%3D%200%3A%20CANFD%20not%20used%20*%2F%3CBR%20%2F%3ECAN2-%26gt%3BMCR%20%3D%200x0000000F%3B%20%2F*%20Negate%20FlexCAN2%20halt%20state%20for%2016%20MBs%20*%2F%3CBR%20%2F%3Ewhile%20((CAN2-%26gt%3BMCR%20%26amp%3B%26amp%3B%20CAN_MCR_FRZACK_MASK)%20%26gt%3B%26gt%3B%20CAN_MCR_FRZACK_SHIFT)%20%7B%7D%3CBR%20%2F%3E%2F*%20Good%20practice%3A%20wait%20for%20FRZACK%20to%20clear%20(not%20in%20freeze%20mode)%20*%2F%3CBR%20%2F%3Ewhile%20((CAN2-%26gt%3BMCR%20%26amp%3B%26amp%3B%20CAN_MCR_NOTRDY_MASK)%20%26gt%3B%26gt%3B%20CAN_MCR_NOTRDY_SHIFT)%20%7B%7D%3CBR%20%2F%3E%2F*%20Good%20practice%3A%20wait%20for%20NOTRDY%20to%20clear%20(module%20ready)%20*%2F%3CBR%20%2F%3E%7D%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2366300%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20FLEXCAN%20%20bitrate%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2366300%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F239904%22%20target%3D%22_blank%22%3E%40MrShen%3C%2FA%3E%2C%3C%2FP%3E%0A%3CP%3EYou%20can%20refer%20to%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2FMPC5xxx-Knowledge-Base%2FMPC5xxx-S32Kxx-LPCxxxx-CAN-CAN-FD-bit-timing-calculation%2Fta-p%2F1119319%22%20target%3D%22_blank%22%3EMPC5xxx%2FS32Kxx%2FLPCxxxx%3A%20CAN%20%2F%20CAN%20FD%20bit%20timing%20calculation%3C%2FA%3E%26nbsp%3Bdocument.%20Simply%20modify%20the%20parameters%20for%20your%20setup%20(e.g.%20S32K1xx%2C%20TJA1050%2C%20bitrate%20%2B%20sampling%20point%2C%20etc.)%2C%20and%20the%20tool%20will%20provide%20some%20configurations%20for%20the%20respective%20bitrate%2C%20along%20with%20CAN_CTRL1%20values%3A%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Julin_AragnM_0-1778863628803.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Julin_AragnM_0-1778863628803.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F385626iBE8A0EA97AC34D57%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Julin_AragnM_0-1778863628803.png%22%20alt%3D%22Julin_AragnM_0-1778863628803.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EI%20believe%20it%20is%20feasible%20to%20set%20both%20transceivers%20to%20100kbps%2C%20as%20TJA1055%20supports%20up%20to%26nbsp%3B125kbps.%3C%2FP%3E%0A%3CP%3EBest%20regards%2C%3CBR%20%2F%3EJuli%C3%A1n%3C%2FP%3E%3C%2FLINGO-BODY%3E