RV-C Protocol
RV-C is a CAN-based communication network specifically designed for Recreation Vehicles (RVs/motorhomes). It allows all devices in an RV (lights, awnings, climate control, generators, inverters, etc.) to communicate with each other and be controlled from a central interface.
- Developed by: Recreation Vehicle Industry Association (RVIA)
- Based on: CAN 2.0B (Controller Area Network) - the same technology used in automotive applications
- Website: www.rv-c.com ↗
The Big Picture - How It Works
Think of RV-C like a shared communication bus where all devices can talk and listen:
- All devices are connected to two twisted wires (CAN_H and CAN_L)
- Devices broadcast messages on the bus that everyone can hear
- Each message has a unique ID (DGN) that tells what kind of data it contains
- Devices filter messages and only process the ones relevant to them
- No master device - it’s a peer-to-peer network where everyone is equal
Physical Layer
Wiring
- Cable: Twisted pair (2 wires: CAN_H = White, CAN_L = Blue)
- Optional wires: Power (Red/Black) and Shield (Bare)
- Wire size: 15-24 AWG (typically 18 or 20 AWG)
- Topology: Linear bus with short drops (star topology NOT allowed)
Bus Configuration
[Device] [Device] [Device] [Device]
| | | |
====*==========*====================*==========*====
120Ω 120Ω
(terminator) (terminator)
^----- Main trunk line ------^
Important Limits
- Max devices: 172 nodes on one bus
- Max bus length: Depends on wire gauge (e.g., 265m for 20 AWG)
- Max drop length: 6 meters per device
- Termination: Two 120Ω resistors (one at each end)
- Speed: 250 kbit/s (fixed)
Message Structure
Every RV-C message uses the CAN extended frame format (29-bit identifier + 8 data bytes).
The Message ID Breakdown
The 29-bit CAN ID is divided into meaningful parts:
┌─────────────────────────────────────────────────┐
│ Priority │ DGN-High │ DGN-Low │ Source │
│ (3 bits) │ (7 bits) │ (8 bits) │ Address │
│ │ │ │ (8 bits) │
└─────────────────────────────────────────────────┘
Bits Bits Bits Bits
28-26 24-18 15-8 7-0
Components:
- Priority (3 bits): Message urgency (0=highest, 7=lowest, usually 6 for status)
- DGN (Data Group Number, 17 bits): Identifies what type of data this is
- DGN-High (7 bits): Main message category
- DGN-Low (8 bits): Either sub-category OR target address for commands
- Source Address (8 bits): Which device sent this message (0-253)
Data Payload
Always 8 bytes of data, even if not all are used. Unused bytes are filled with 0xFF.
Key Concepts
Source Address (SA)
Every device on the network needs a unique 8-bit address (0-253).
Two ways to get an address:
- Static: Hard-coded address (e.g., Generator is always 35)
- Dynamic: Device claims an address at startup using address claiming procedure
Important:
- Source Address identifies the microprocessor/node, not the physical device
- One microprocessor can handle multiple devices (e.g., one board controlling 3 awnings)
Device Type
Defines what a device can do. Examples:
- Awning
- Thermostat (Climate Control)
- Generator
- Inverter
- DC Load (lights, pumps, etc.)
- Water Heater
Each device type has:
- Specific messages (DGNs) it can send/receive
- A Default Source Address (DSA) for diagnostics
Instance
Since RVs often have multiple devices of the same type (e.g., 7 awnings, 4 thermostats), RV-C uses instances to distinguish them.
How it works:
- Instance is the first data byte in multi-instance device messages
- Instance 1 = Main Patio Awning
- Instance 2 = Side Awning
- Instance 3 = Rear Awning, etc.
Key difference:
- Source Address = Which microprocessor sent the message
- Instance = Which physical device is being described/controlled
Example: One thermostat controller (SA=100) can control 4 zones (Instances 1-4)
Message Types
1. Information Sharing (Status Messages)
Devices broadcast their status periodically:
- Generator: “I’m running at 50% load, 240V AC, 3500 RPM”
- Battery Monitor: “Battery is 85% charged, 13.2V, 15A charging”
- Thermostat: “Zone 1 is 72°F, set to 70°F, AC is running”
Characteristics:
- Priority: Usually 6
- Broadcast interval: Varies (50ms minimum gap)
- May broadcast “on change” or on schedule
2. Control Messages (Commands)
Devices send commands to other devices:
- User panel → Awning: “Extend awning #2”
- Thermostat → Air conditioner: “Turn on, set to 70°F”
Target addressing:
- For multi-instance devices: First data byte contains target instance
- For direct commands: DGN-Low contains target source address
3. Information Request
A device can request immediate data from others:
- “Please send me your current temperature reading NOW”
- Uses special DGN: EA00h
4. Diagnostics Messages (DM-RV)
Every device must report its health status:
- Operating status (normal, warning, error)
- Fault codes (which component failed)
- Sent periodically, even when nothing is wrong
Special Data Values
RV-C defines two universal values for all data types:
“Data Not Available”
- All bits set to 1 (0xFF, 0xFFFF, etc.)
- Meaning depends on context:
- In commands: “Don’t change this value”
- In status: “This sensor is not supported” or “Data not ready yet”
“Error / Out of Range”
- All bits set to 1 except the MSB (0xFE, 0xFFFE, etc.)
- In status: “Sensor error or abnormal condition”
- Never used in commands
Practical Example: Controlling an Awning
Let’s walk through extending awning #2:
1. User presses “Extend” on control panel
2. Panel sends AWNING_COMMAND message:
CAN ID:
Priority: 3 (high, because it's a command)
DGN: 1FED9 (Awning Command)
Source Address: 80 (control panel)
Data Bytes:
Byte 0: 2 (Instance = Awning #2)
Byte 1: 1 (Command = Extend)
Byte 2-7: 0xFF (not used)
3. Awning controller receives message
- Listens for DGN 1FED9
- Checks Byte 0 (instance): “Is this for me?”
- Instance = 2? Yes! Execute command.
4. Awning extends and broadcasts status
CAN ID:
Priority: 6 (normal status)
DGN: 1FEE5 (Awning Status)
Source Address: 45 (awning controller)
Data Bytes:
Byte 0: 2 (Instance = Awning #2)
Byte 1: 50 (Position = 50% extended)
Byte 2: 1 (Status = Extending)
Byte 3-7: Other status data
5. Panel receives status and updates display
- “Awning #2: Extending… 50%”
Compliance Levels
RV-C defines two compliance levels:
Level One
Basic network participation
- Address claiming (if dynamic)
- Respond to required messages
- Maintain network integrity
Level Two
Full interoperability
- Use appropriate DGNs for device type
- Proper diagnostics reporting
- Meaningful error responses (NAKs)
- Document all features
Quick Reference: Common DGNs
Here are some frequently used Data Group Numbers:
| DGN (hex) | Name | Purpose |
|---|---|---|
| 1FFFF | DM-RV | Diagnostic message (health status) |
| 1FED9 | AWNING_COMMAND | Control awning |
| 1FEE5 | AWNING_STATUS | Awning position/status |
| 1FFE1 | THERMOSTAT_COMMAND | Control HVAC |
| 1FEF7 | DC_DIMMER_COMMAND_2 | Control lights |
| 1FFC7 | DC_SOURCE_STATUS_1 | Battery voltage/current |
| EA00 | REQUEST_DGN | Request immediate data |
| EE00 | ADDRESS_CLAIMED | Dynamic address claim |
(Full list of 100+ DGNs in Section 6 of the specification)
Protocol References
- RV-C Official Website ↗ - Official RV-C specification and updates
- CAN Bus Specification ↗ - Underlying CAN protocol standards
