8.6 KiB
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
-
Melexis Universal Master (MUM)
- BeagleBone-based LIN master device
- Default IP: 192.168.7.2
- LIN interface: lin0
- Power control: power_out0
-
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
- LIN Bus: Connect MUM LIN0 to ALM Platform LIN pin
- Power: Connect MUM power_out0 to ALM Platform power (controlled by scripts)
- Ground: Common ground between MUM and ALM Platform
Files
Scripts
test_auto_addressing.py- Main auto-addressing testtest_led_control.py- LED control verification testpower_cycle.py- ECU power cycle utilityinstall_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 librarypymumclient- Melexis Universal Master client library
Installation
Run the installer script to set up dependencies:
./install_packages.sh
Or manually install:
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:
python3 test_auto_addressing.py
With options:
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:
- Connects to MUM
- Reads current NAD from ECU
- Selects target NAD (automatically different from current)
- 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
- Polls status frames between iterations
- 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:
python3 test_led_control.py
With options:
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:
- Connects to MUM
- Reads current NAD from ECU
- Fades LED through Red → Green → Blue
- 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:
python3 power_cycle.py
With options:
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:
- Powers down ECU
- Waits specified duration
- Powers up ECU
- Waits for ECU to boot
Configuration
All hardware-specific settings are centralized in config.py. Edit this file to match your setup:
Common Settings to Modify
# 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
#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:
- Check MUM is powered and connected via USB
- Verify IP address with
ip addr showorifconfig - Ping MUM:
ping 192.168.7.2 - 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:
- Check LIN bus connections
- Verify ECU is powered (use power_cycle.py)
- Check baudrate matches (19200)
- Verify NAD is correct
NAD Not Changing
Problem: Auto-addressing completes but NAD doesn't change
Solution:
- Verify firmware has
HAL_LAA_LINAATWISTDETECTDISABLE = 1 - Rebuild and flash firmware
- Check initial NAD is in valid range (0x01-0x10)
- Run test with
--check-interval 1to see intermediate status
LED Not Changing
Problem: LED control test doesn't change LED color
Solution:
- Verify NAD parameter matches ECU NAD
- Check
ALM_Req_Aframe ID is 0x01 in LDF - Run auto-addressing test first to verify communication
- Check LED connections on hardware
Integration with Build/Flash Pipeline
These tests integrate with the automated firmware development pipeline:
# 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 mode0x02- ASSIGN: Assign NAD to node0x03- STORE: Save NAD to NVM0x04- 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.