322 lines
8.6 KiB
Markdown
322 lines
8.6 KiB
Markdown
# LIN Automated Test Scripts
|
|
|
|
Automated test scripts for LIN bus communication and auto-addressing functionality using the Melexis Universal Master (MUM) hardware.
|
|
|
|
## Purpose
|
|
|
|
This folder contains Python scripts to automate LIN bus testing without requiring manual tool switching between MUM and babylin. The scripts provide:
|
|
|
|
- **LIN Auto-Addressing Test**: Automated BSM-SNPD (Bus Shunt Method - Slave Node Position Detection) auto-addressing
|
|
- **LED Control Test**: Verify LIN communication by controlling the board LED
|
|
- **Power Cycle Utility**: Power cycle the ECU through MUM
|
|
- **Dependency Installation**: Automated setup of required Python packages
|
|
|
|
## Hardware Setup
|
|
|
|
### Required Hardware
|
|
|
|
1. **Melexis Universal Master (MUM)**
|
|
- BeagleBone-based LIN master device
|
|
- Default IP: 192.168.7.2
|
|
- LIN interface: lin0
|
|
- Power control: power_out0
|
|
|
|
2. **ALM Platform MLX81124 Board**
|
|
- Target ECU with LIN auto-addressing support
|
|
- RGB LED for visual feedback
|
|
|
|
### Hardware Connections
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ MUM │ │ ALM Platform │
|
|
│ (192.168.7.2) │ │ MLX81124 │
|
|
├─────────────────┤ ├──────────────────┤
|
|
│ │ │ │
|
|
│ LIN (lin0) ├────────────────────┤ LIN │
|
|
│ │ │ │
|
|
│ Power ├────────────────────┤ VCC/GND │
|
|
│ (power_out0) │ │ │
|
|
│ │ │ RGB LED │
|
|
└─────────────────┘ └──────────────────┘
|
|
```
|
|
|
|
### Connection Details
|
|
|
|
1. **LIN Bus**: Connect MUM LIN0 to ALM Platform LIN pin
|
|
2. **Power**: Connect MUM power_out0 to ALM Platform power (controlled by scripts)
|
|
3. **Ground**: Common ground between MUM and ALM Platform
|
|
|
|
## Files
|
|
|
|
### Scripts
|
|
|
|
- **`test_auto_addressing.py`** - Main auto-addressing test
|
|
- **`test_led_control.py`** - LED control verification test
|
|
- **`power_cycle.py`** - ECU power cycle utility
|
|
- **`install_packages.sh`** - Dependency installer
|
|
|
|
### Configuration
|
|
|
|
- **`config.py`** - Hardware and protocol configuration
|
|
- MUM connection settings
|
|
- LIN bus parameters
|
|
- BSM-SNPD protocol constants
|
|
- Test defaults
|
|
|
|
## Dependencies
|
|
|
|
### Python Packages
|
|
|
|
The scripts require these Python packages:
|
|
- `pylin` - LIN bus communication library
|
|
- `pymumclient` - Melexis Universal Master client library
|
|
|
|
### Installation
|
|
|
|
Run the installer script to set up dependencies:
|
|
|
|
```bash
|
|
./install_packages.sh
|
|
```
|
|
|
|
Or manually install:
|
|
|
|
```bash
|
|
pip3 install pylin pymumclient
|
|
```
|
|
|
|
## Usage
|
|
|
|
### 1. Auto-Addressing Test
|
|
|
|
Tests LIN auto-addressing using BSM-SNPD protocol. Automatically selects a target NAD different from the current NAD.
|
|
|
|
**Basic usage:**
|
|
```bash
|
|
python3 test_auto_addressing.py
|
|
```
|
|
|
|
**With options:**
|
|
```bash
|
|
python3 test_auto_addressing.py --iterations 1 --check-interval 1
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--host` - MUM IP address (default: 192.168.7.2)
|
|
- `--iterations` - Number of auto-addressing iterations (default: 1)
|
|
- `--check-interval` - Check status every N iterations (0 = only at end)
|
|
|
|
**What it does:**
|
|
1. Connects to MUM
|
|
2. Reads current NAD from ECU
|
|
3. Selects target NAD (automatically different from current)
|
|
4. Sends BSM-SNPD sequence:
|
|
- INIT (0x01) - Initialize auto-addressing
|
|
- ASSIGN (0x02) - Assign NAD (16 frames)
|
|
- STORE (0x03) - Store to NVM
|
|
- FINALIZE (0x04) - Exit auto-addressing mode
|
|
5. Polls status frames between iterations
|
|
6. Verifies NAD change
|
|
|
|
**Expected output:**
|
|
```
|
|
Initial NAD: 0x07
|
|
Target NAD: 0x01
|
|
SUCCESS! NAD changed from 0x07 to 0x01
|
|
```
|
|
|
|
### 2. LED Control Test
|
|
|
|
Verifies LIN communication by controlling the RGB LED through color fades.
|
|
|
|
**Basic usage:**
|
|
```bash
|
|
python3 test_led_control.py
|
|
```
|
|
|
|
**With options:**
|
|
```bash
|
|
python3 test_led_control.py --nad 0x02 --cycles 3 --duration 3.0
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--host` - MUM IP address (default: 192.168.7.2)
|
|
- `--nad` - Node address to control (default: 0x01)
|
|
- `--cycles` - Number of fade cycles (default: 3)
|
|
- `--duration` - Duration per color in seconds (default: 3.0)
|
|
|
|
**What it does:**
|
|
1. Connects to MUM
|
|
2. Reads current NAD from ECU
|
|
3. Fades LED through Red → Green → Blue
|
|
4. Each color fades in and out smoothly
|
|
|
|
**Expected output:**
|
|
```
|
|
Current NAD: 0x02
|
|
Fading Red...
|
|
Fading Green...
|
|
Fading Blue...
|
|
LED test complete
|
|
```
|
|
|
|
### 3. Power Cycle Utility
|
|
|
|
Power cycles the ECU through MUM power control.
|
|
|
|
**Basic usage:**
|
|
```bash
|
|
python3 power_cycle.py
|
|
```
|
|
|
|
**With options:**
|
|
```bash
|
|
python3 power_cycle.py --wait 3.0
|
|
```
|
|
|
|
**Parameters:**
|
|
- `--host` - MUM IP address (default: 192.168.7.2)
|
|
- `--wait` - Wait time after power down/up in seconds (default: 2.0)
|
|
|
|
**What it does:**
|
|
1. Powers down ECU
|
|
2. Waits specified duration
|
|
3. Powers up ECU
|
|
4. Waits for ECU to boot
|
|
|
|
## Configuration
|
|
|
|
All hardware-specific settings are centralized in [`config.py`](config.py). Edit this file to match your setup:
|
|
|
|
### Common Settings to Modify
|
|
|
|
```python
|
|
# MUM Configuration
|
|
MUM_HOST = '192.168.7.2' # Change if MUM has different IP
|
|
|
|
# LIN Bus Configuration
|
|
LIN_BAUDRATE = 19200 # Change if using different baudrate
|
|
|
|
# Test Parameters
|
|
AUTOADDRESSING_DEFAULT_ITERATIONS = 1 # Default test iterations
|
|
LED_DEFAULT_NAD = 0x01 # Default NAD for LED test
|
|
```
|
|
|
|
## Firmware Requirements
|
|
|
|
The firmware must have auto-addressing enabled with twist detection disabled for single-node MUM testing:
|
|
|
|
**File:** `02-Software/02-Source-Code/code/src/03-HAL/LAA/cfg/HAL_LAA_cfg.h`
|
|
|
|
```c
|
|
#define HAL_LAA_LINAATWISTDETECTDISABLE (1u)
|
|
```
|
|
|
|
This allows the `LASTSLAVE` flag to be set directly without requiring multi-node hardware setup.
|
|
|
|
## Troubleshooting
|
|
|
|
### MUM Connection Issues
|
|
|
|
**Problem:** Cannot connect to MUM
|
|
```
|
|
Error: Connection to 192.168.7.2 failed
|
|
```
|
|
|
|
**Solution:**
|
|
1. Check MUM is powered and connected via USB
|
|
2. Verify IP address with `ip addr show` or `ifconfig`
|
|
3. Ping MUM: `ping 192.168.7.2`
|
|
4. Check USB connection is recognized: `lsusb`
|
|
|
|
### No Response from ECU
|
|
|
|
**Problem:** ECU not responding to LIN frames
|
|
```
|
|
Error: S2M frame receiving failed with error code: 3 - Rx timeout error
|
|
```
|
|
|
|
**Solution:**
|
|
1. Check LIN bus connections
|
|
2. Verify ECU is powered (use power_cycle.py)
|
|
3. Check baudrate matches (19200)
|
|
4. Verify NAD is correct
|
|
|
|
### NAD Not Changing
|
|
|
|
**Problem:** Auto-addressing completes but NAD doesn't change
|
|
|
|
**Solution:**
|
|
1. Verify firmware has `HAL_LAA_LINAATWISTDETECTDISABLE = 1`
|
|
2. Rebuild and flash firmware
|
|
3. Check initial NAD is in valid range (0x01-0x10)
|
|
4. Run test with `--check-interval 1` to see intermediate status
|
|
|
|
### LED Not Changing
|
|
|
|
**Problem:** LED control test doesn't change LED color
|
|
|
|
**Solution:**
|
|
1. Verify NAD parameter matches ECU NAD
|
|
2. Check `ALM_Req_A` frame ID is 0x01 in LDF
|
|
3. Run auto-addressing test first to verify communication
|
|
4. Check LED connections on hardware
|
|
|
|
## Integration with Build/Flash Pipeline
|
|
|
|
These tests integrate with the automated firmware development pipeline:
|
|
|
|
```bash
|
|
# 1. Modify firmware
|
|
vim 02-Software/02-Source-Code/code/src/...
|
|
|
|
# 2. Build
|
|
./00-Tools/migrate_mlx_tools_linux/build_linux.sh
|
|
|
|
# 3. Flash
|
|
./00-Tools/migrate_mlx_tools_linux/flash_linux.sh
|
|
|
|
# 4. Test auto-addressing
|
|
python3 00-Tools/automated_lin_test/test_auto_addressing.py
|
|
|
|
# 5. Verify LED control
|
|
python3 00-Tools/automated_lin_test/test_led_control.py
|
|
```
|
|
|
|
## Technical Details
|
|
|
|
### LIN Frame IDs
|
|
|
|
- `0x3C` - MasterReq (diagnostic frames)
|
|
- `0x11` - ALM_Status (4 bytes, contains NAD in byte 0)
|
|
- `0x01` - ALM_Req_A (8 bytes, LED control)
|
|
|
|
### BSM-SNPD Protocol
|
|
|
|
Auto-addressing uses diagnostic service 0xB5 with subfunctions:
|
|
- `0x01` - INIT: Enable auto-addressing mode
|
|
- `0x02` - ASSIGN: Assign NAD to node
|
|
- `0x03` - STORE: Save NAD to NVM
|
|
- `0x04` - FINALIZE: Exit auto-addressing mode
|
|
|
|
Frame structure:
|
|
```
|
|
Byte 0: NAD = 0x7F (broadcast)
|
|
Byte 1: PCI = 0x06 (6 data bytes)
|
|
Byte 2: SID = 0xB5 (BSM-SNPD service)
|
|
Byte 3: Supplier ID LSB = 0xFF
|
|
Byte 4: Supplier ID MSB = 0x7F
|
|
Byte 5: Subfunction
|
|
Byte 6: Parameter 1
|
|
Byte 7: Parameter 2
|
|
```
|
|
|
|
### Checksum Requirements
|
|
|
|
**Critical:** BSM frames must use **LIN 1.x Classic checksum**. The scripts use `ld_put_raw()` to ensure Classic checksum. Using `send_message()` with Enhanced checksum will cause frames to be rejected by firmware.
|
|
|
|
## License
|
|
|
|
Part of the ALM Platform MLX81124 project.
|