Updated 2026-10-09
What it is and who sends it
The Basic Safety Message is the heartbeat of a connected vehicle. Every equipped light vehicle, truck, bus and emergency vehicle sends one, and every other vehicle and roadside unit within range listens. It carries the sender's position, motion and size, plus optional details about recent path, predicted path, lights, brakes and vehicle class. Vehicle safety applications such as forward-collision warning, intersection movement assist and emergency electronic brake lights are built entirely on the BSMs of the vehicles nearby. Roadside units do not originate BSMs; they receive them, and in a pilot they usually forward them to a back office for counting, breadcrumb trails and performance measurement (see live BSM and breadcrumbs).
The message is defined in SAE J2735 (DSRCmsgID 20) and its on-board performance requirements are in SAE J2945/1, which fixes how often it is sent, how accurate the position must be, when Part II content is required and how the temporary identifier and the security certificate change together.
When it is broadcast
| Property | Value |
|---|---|
| Nominal rate | 10 Hz (every 100 ms); J2945/1 congestion control lets a vehicle stretch the interval when the channel is busy |
| PSID | 0x20 (p-encoded 20) |
| Channel | The 20 MHz C-V2X channel in 5.905 … 5.925 GHz under FCC 24-123; DSRC channel 172 until the December 14, 2026 sunset |
| Signing | Always signed (IEEE 1609.2) with a short-lived pseudonym certificate; the full certificate is attached about once per second and a digest the rest of the time |
| Identifier | id is a random 4-byte TemporaryID that changes about every five minutes, together with the certificate, so a vehicle cannot be tracked across changes |
| Size | 40 to 70 bytes for Part I alone; 80 to 300 bytes with Part II; the security envelope adds roughly 100 bytes with a digest or 250 with a full certificate |
Structure, section by section
A BSM is a BasicSafetyMessage with a mandatory coreData (Part I), an optional partII list of up to eight extensions, and an optional regional list.
Part I: coreData
| Field | Meaning | Units and range | Typical value | Where it comes from |
|---|---|---|---|---|
msgCnt | Sequence number, +1 per message | 0 … 127, wraps | 42 | OBU counter |
id | Temporary identifier | 4 bytes hex | A1B2C3D4 | OBU, rotates with the certificate |
secMark | Milliseconds within the current UTC minute | 0 … 59999; 65535 unavailable | 12345 | GNSS time |
lat, long | Position of the vehicle reference point | 1/10 microdegree | 388823410, −771757920 | GNSS |
elev | Elevation | 0.1 m, WGS-84 | 1050 | GNSS |
accuracy | Position error ellipse: semiMajor, semiMinor (0.05 m), orientation | see units | 20, 15, 9000 | GNSS receiver |
transmission | Gear state | enum: neutral, park, forwardGears, reverseGears, unavailable | forwardGears | vehicle bus |
speed | Ground speed | 0.02 m/s; 8191 unavailable | 750 (33.6 mph) | vehicle bus or GNSS |
heading | Direction of travel, clockwise from true north | 0.0125°; 28800 unavailable | 7200 (east) | GNSS or fused |
angle | Steering wheel angle | 1.5°; 127 unavailable | 2 | vehicle bus |
accelSet | long, lat (0.01 m/s²), vert (0.02 g), yaw (0.01 °/s) | 15, −3, 0, −20 | inertial sensors | |
brakes | wheelBrakes (5-bit: unavailable, leftFront, leftRear, rightFront, rightRear) plus traction, ABS, stability control, brake boost, auxiliary brakes | enums | all on or off | vehicle bus |
size | width, length | 1 cm | 180, 450 | vehicle configuration |
J2945/1 requires the position to be the center of the vehicle's front bumper projected to the ground, with a stated accuracy, and it requires accelSet, brakes, size and the rest to be reported as unavailable rather than guessed when the vehicle cannot measure them.
Part II: extensions
Each entry is {"partII-Id": n, "partII-Value": {...}}. Three ids are defined:
| partII-Id | Extension | Contents | When required |
|---|---|---|---|
| 0 | VehicleSafetyExtensions | events (13-bit VehicleEventFlags), pathHistory, pathPrediction, lights (9-bit ExteriorLights) | J2945/1: path history and prediction in every BSM once available; events whenever a flag is set; lights when they change |
| 1 | SpecialVehicleExtensions | vehicleAlerts (EmergencyDetails: siren, lightbar, multi-vehicle, privileged events, response type), description (ITIS event description) | Emergency and public-safety vehicles while responding |
| 2 | SupplementalVehicleExtensions | classification (BasicVehicleClass), classDetails (role, HPMS type, fuel), vehicleData (height, bumpers, mass, trailer weight), status (DisabledVehicle); 2024 adds fhwaVehicleClass, trailers and schoolBus | Heavy vehicles, transit, school buses, disabled vehicles |
Path history (crumbData, 1 … 23 points) is a short trail of where the vehicle has been, as offsets from the current position in 1/10 microdegree and 0.1 m, each with a timeOffset in 10 ms units. J2945/1 asks for enough points to describe the last 300 m of travel within a small lateral error, typically 5 to 15 points at highway speed. Path prediction is a single radiusOfCurve (10 cm units, 32767 means straight) with a confidence (0.5 % units). Together they let a receiver decide whether the sender is in its lane, on a curve or about to cut across.
Event flags are the quickest diagnostic in a stream. eventHardBraking (bit 7) fires on deceleration beyond a threshold, eventABSactivated (bit 2) and eventTractionControlLoss (bit 3) show slippery pavement, eventHazardLights (bit 0) and eventDisabledVehicle (bit 11) show a stopped vehicle, eventAirBagDeployment (bit 12) shows a crash. The portal's live view can trigger on any of them.
What changed in the 2024 dictionary
J2735_202409 split the single ASN.1 module into one module per message, which is why the portal's decoder reports a dictionary revision. For the BSM the practical changes are: several Part II items that no vehicle implemented (weather report, weather probe, obstacle detection, speed profile, RTCM package, and the trailer data in SpecialVehicleExtensions) were renamed doNotUse and must be left absent; the SSP index fields inside EmergencyDetails and PrivilegedEvents are likewise doNotUse and are set to 0; and SupplementalVehicleExtensions gained an FHWA 13-class fhwaVehicleClass, a trailers list from J2945/1B and a schoolBus structure from J2945/1C with flashing-light and loading flags. A 2016-era BSM still decodes, but a 2016 encoder that filled the removed items will fail the 2024 schema check; switch the decoder to the 2016 dictionary to read it.
How to create one in this portal
- Open the creator and load the BSM template. It is a vehicle on Broad Street in Falls Church, VA, heading east at 33.6 mph, with three path-history points, a straight path prediction and low beams on.
- In the quick fields set the position, speed, heading and
secMark. KeepmsgCntandidrealistic: a decoder that sees the samemsgCnttwice flags a replay. - Use the structure explorer to toggle Part II parts. Add
eventsand set the bit you want to demonstrate, or removepathHistoryto see how the size drops. For an emergency vehicle addpartII-Id 1withsirenUse inUse,lightsUse inUseandresponseType emergency. - Encode / Validate. The hex begins
0014(messageId 20). The summary shows the plain values and the map shows the position and the trail. - A BSM is not normally stored on an RSU, but for a bench test you can Push to my RSU with PSID 0x20 so a receiving OBU or a sniffer sees a synthetic vehicle; use a short delivery window and remember that a real road requires a signed message from a certified OBU.
How to read a decoded one
Paste the hex into the decoder. Look first at the headline: it should say BasicSafetyMessage (20), with the schema the sender used. Then check:
secMarkagainst the receive time. A difference of more than a second means a stale message, a clock problem on the sender or a replay.msgCntcontinuity across consecutive messages from the sameid. Gaps mean packet loss; repeats mean a replay or a logging duplicate.accuracy.semiMajorabove 100 (5 m) is poor GNSS; many applications ignore such messages.- Part II presence. A production vehicle sends
VehicleSafetyExtensionsnearly always. Its absence in every message from oneidusually means a test unit or a stripped-down OBU. - Path history offsets. Points should trail behind the heading. Points ahead of the vehicle or offsets that jump by hundreds of meters indicate a sign error in the encoder.
- Sentinels.
speed 8191,heading 28800,elev −4096,angle 127are "unavailable", not measurements.
Common mistakes: a message that decodes as something else was framed with the wrong messageId; a payload that stops early is truncated; a 2016 message that fails under 2024 needs the older dictionary; an events string of the wrong length is rejected at encode time because the bit string has a fixed size.
Related standards and further reading
- SAE J2735_202409, the BasicSafetyMessage and Common modules.
- SAE J2945/1, On-Board System Requirements for V2V Safety Communications (rate, accuracy, Part II rules, ID change, congestion control).
- IEEE 1609.2 and 1609.2.1 for signing and the pseudonym certificate life cycle; see SCMS.
- Units cheat sheet, live BSM and breadcrumbs, PSM for the pedestrian equivalent, SDSM for how roadside sensors describe unequipped vehicles.