Wiki › Messages › BSM, the Basic Safety Message: what every vehicle broadcasts ten times a second

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

PropertyValue
Nominal rate10 Hz (every 100 ms); J2945/1 congestion control lets a vehicle stretch the interval when the channel is busy
PSID0x20 (p-encoded 20)
ChannelThe 20 MHz C-V2X channel in 5.905 … 5.925 GHz under FCC 24-123; DSRC channel 172 until the December 14, 2026 sunset
SigningAlways 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
Identifierid is a random 4-byte TemporaryID that changes about every five minutes, together with the certificate, so a vehicle cannot be tracked across changes
Size40 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

FieldMeaningUnits and rangeTypical valueWhere it comes from
msgCntSequence number, +1 per message0 … 127, wraps42OBU counter
idTemporary identifier4 bytes hexA1B2C3D4OBU, rotates with the certificate
secMarkMilliseconds within the current UTC minute0 … 59999; 65535 unavailable12345GNSS time
lat, longPosition of the vehicle reference point1/10 microdegree388823410, −771757920GNSS
elevElevation0.1 m, WGS-841050GNSS
accuracyPosition error ellipse: semiMajor, semiMinor (0.05 m), orientationsee units20, 15, 9000GNSS receiver
transmissionGear stateenum: neutral, park, forwardGears, reverseGears, unavailableforwardGearsvehicle bus
speedGround speed0.02 m/s; 8191 unavailable750 (33.6 mph)vehicle bus or GNSS
headingDirection of travel, clockwise from true north0.0125°; 28800 unavailable7200 (east)GNSS or fused
angleSteering wheel angle1.5°; 127 unavailable2vehicle bus
accelSetlong, lat (0.01 m/s²), vert (0.02 g), yaw (0.01 °/s)15, −3, 0, −20inertial sensors
brakeswheelBrakes (5-bit: unavailable, leftFront, leftRear, rightFront, rightRear) plus traction, ABS, stability control, brake boost, auxiliary brakesenumsall on or offvehicle bus
sizewidth, length1 cm180, 450vehicle 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-IdExtensionContentsWhen required
0VehicleSafetyExtensionsevents (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
1SpecialVehicleExtensionsvehicleAlerts (EmergencyDetails: siren, lightbar, multi-vehicle, privileged events, response type), description (ITIS event description)Emergency and public-safety vehicles while responding
2SupplementalVehicleExtensionsclassification (BasicVehicleClass), classDetails (role, HPMS type, fuel), vehicleData (height, bumpers, mass, trailer weight), status (DisabledVehicle); 2024 adds fhwaVehicleClass, trailers and schoolBusHeavy 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

  1. 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.
  2. In the quick fields set the position, speed, heading and secMark. Keep msgCnt and id realistic: a decoder that sees the same msgCnt twice flags a replay.
  3. Use the structure explorer to toggle Part II parts. Add events and set the bit you want to demonstrate, or remove pathHistory to see how the size drops. For an emergency vehicle add partII-Id 1 with sirenUse inUse, lightsUse inUse and responseType emergency.
  4. Encode / Validate. The hex begins 0014 (messageId 20). The summary shows the plain values and the map shows the position and the trail.
  5. 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:

  • secMark against the receive time. A difference of more than a second means a stale message, a clock problem on the sender or a replay.
  • msgCnt continuity across consecutive messages from the same id. Gaps mean packet loss; repeats mean a replay or a logging duplicate.
  • accuracy. semiMajor above 100 (5 m) is poor GNSS; many applications ignore such messages.
  • Part II presence. A production vehicle sends VehicleSafetyExtensions nearly always. Its absence in every message from one id usually 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 127 are "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.

  • 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.