chipKIT® Development Platform

Inspired by Arduino™

BRP for CAN-bus with 20 kBaud

Created Tue, 06 Mar 2012 08:22:23 +0000 by RonnyE


Tue, 06 Mar 2012 08:22:23 +0000

Hi, I am new in this forum and actually I program for the automotive industry. The mostly setted CAN baudrate are 125k, 250k or 500kBaud. But for e.g heading or in the industry area this value can be set to 20kBaud. And also the examples in this forum are for the higher baud rates.

I have a problem with the baud prescaler. On the max32 i have a CPU frequency of 80 Mhz. I need a baud rate on CAN of [color=#0000FF]20 kBaud[/color]. The formula to calculate the prescaler is

BRP = (FrequencyCPU/(number of t-quanta2 baudrate) ) -1

so in my case i have the following calculate:

BRP = (80.000.000/(25 * 2 * 20.000)) - 1 = 79 BRP = (80.000.000/(20 * 2 * 20.000)) - 1 = 99 BRP = (80.000.000/(16 * 2 * 20.000)) - 1 = 124 BRP = (80.000.000/(10 * 2 * 20.000)) - 1 = 199

The problem is the 6 bit BRP value in the CAN config register C1CFG. The biggest possible value is d63 ( 0x3F / b111111). But i need a value of 79,99,124 or 199.

How can i set the cpu frequency pre prescale to set reasonable BRP in the CAN config register

best regards RonnyE


Mon, 26 Mar 2012 14:11:21 +0000

Hi developer, the last working configuration is with set the CAN_BUS_SPEED to 33.3 kBaud. When i am try the Baudrate set to 20kBaud it does'nt work. I have also try some configuration with the propagation, phase segment 1 and phase segment 2 settings. Unfortunately, without success. I have also tried some bitconfigurators like ics2510BitTime.exe from kvaser or this online bittime configurator from . The prescaler settings, see below, are wrong because i have take the controller oszillator not the CAN osczillator frequence. Is this right? I am think the library of CAN calculate the wrong Prescaler in the function "setspeed". When i am run the program on Chipkit max32 the baudrate scanner form CANoe (Vector Informatik) shows me the wrong values.

Has anyone an idea