191 lines
5.5 KiB
ReStructuredText
191 lines
5.5 KiB
ReStructuredText
=======================
|
|
FlexRay Getting Started
|
|
=======================
|
|
|
|
Prerequisites
|
|
=============
|
|
|
|
- icsneopy library installed
|
|
- FlexRay hardware device connected (e.g., Fire3 Flexray)
|
|
- Proper FlexRay bus termination (100Ω on each channel end)
|
|
|
|
Physical Hardware Setup for Two-Node Testing
|
|
---------------------------------------------
|
|
|
|
For testing the basic transmit and receive examples with a single device:
|
|
|
|
- Hardware: Device with dual FlexRay controllers (e.g., neoVI FIRE 3 Flexray)
|
|
- Connection: FLEXRAY_01 Channel A looped to FLEXRAY_02 Channel A
|
|
- Termination: 100Ω termination resistors on both ends of the loopback
|
|
- Cable: Use proper FlexRay twisted pair cable (impedance matched)
|
|
|
|
.. note::
|
|
The basic transmit/receive examples are configured for this loopback setup
|
|
where both controllers act as coldstart nodes. For use on an existing
|
|
FlexRay network, see the passive monitoring configuration notes in the
|
|
receive example.
|
|
|
|
FlexRay Coldstart
|
|
-----------------
|
|
|
|
FlexRay networks require at least one "coldstart node" to initialize the network timing.
|
|
The coldstart node is responsible for starting the FlexRay communication cycle.
|
|
|
|
For a complete standalone coldstart example, see the Additional Examples section below.
|
|
|
|
Basic Setup
|
|
===========
|
|
|
|
1. Import the library and find FlexRay device:
|
|
|
|
.. code-block:: python
|
|
|
|
import icsneopy
|
|
|
|
devices = icsneopy.find_all_devices()
|
|
|
|
# Find a device with FlexRay support
|
|
device = None
|
|
for dev in devices:
|
|
if dev.get_extension("FlexRay"):
|
|
device = dev
|
|
break
|
|
|
|
if not device:
|
|
raise RuntimeError("No FlexRay-capable device found")
|
|
|
|
2. Configure FlexRay controller:
|
|
|
|
.. literalinclude:: ../../examples/python/flexray/flexray_transmit_basic.py
|
|
:language: python
|
|
:lines: 12-111
|
|
|
|
3. Open device and go online:
|
|
|
|
.. code-block:: python
|
|
|
|
if not device.open():
|
|
raise RuntimeError("Failed to open device")
|
|
|
|
if not device.go_online():
|
|
raise RuntimeError("Failed to go online")
|
|
|
|
Transmitting FlexRay Frames
|
|
============================
|
|
|
|
This example demonstrates a coldstart node that initiates a FlexRay network
|
|
and transmits simulated sensor data continuously in slot 1.
|
|
|
|
**Hardware Setup**: FLEXRAY_01 looped to FLEXRAY_02
|
|
|
|
**Usage**:
|
|
1. Start the receive example first
|
|
2. Start this transmit example second
|
|
3. Network will initialize and frames will be transmitted
|
|
|
|
.. literalinclude:: ../../examples/python/flexray/flexray_transmit_basic.py
|
|
:language: python
|
|
:lines: 113-170
|
|
|
|
Key Configuration Parameters:
|
|
|
|
- **slotid**: The FlexRay slot ID for transmission (1-2047 for static segment)
|
|
- **cycle**: The FlexRay cycle number (0-63)
|
|
- **cycle_repetition**: How often the frame repeats (1 = every cycle, 2 = every other cycle)
|
|
- **channel**: Transmission channel (A, B, or AB for both)
|
|
- **key_slot_id**: Must be unique per node on the network
|
|
- **key_slot_used_for_startup**: True for coldstart nodes
|
|
- **key_slot_used_for_sync**: True to provide synchronization frames
|
|
|
|
Receiving FlexRay Frames
|
|
=========================
|
|
|
|
This example demonstrates receiving FlexRay frames on FLEXRAY_02 Channel A.
|
|
|
|
**Hardware Setup**: FLEXRAY_01 looped to FLEXRAY_02
|
|
|
|
**Configuration Note**: This example is configured with coldstart capability
|
|
for two-node loopback testing. For passive monitoring on an existing FlexRay
|
|
network:
|
|
|
|
1. Set ``key_slot_used_for_startup = False`` in the controller configuration
|
|
2. Remove the ``controller.set_allow_coldstart(True)`` call
|
|
3. Ensure all cluster parameters match the existing network
|
|
4. The node will sync and receive without transmitting
|
|
|
|
**Usage**:
|
|
1. Start this receive example first
|
|
2. Start the transmit example second
|
|
3. Frames from slot 1 will be displayed with hex and decimal payload views
|
|
|
|
.. literalinclude:: ../../examples/python/flexray/flexray_receive_basic.py
|
|
:language: python
|
|
:lines: 103-170
|
|
|
|
FlexRay Coldstart Configuration
|
|
================================
|
|
|
|
To use the Coldstart example, ensure the following:
|
|
|
|
Set the Flexray network in neoVI Explorer to Coldstart.
|
|
|
|
No other nodes should be present on the network during testing.
|
|
|
|
Nothing connected to Fire3 FlexRay bus.
|
|
|
|
Critical Coldstart Settings
|
|
----------------------------
|
|
|
|
.. literalinclude:: ../../examples/python/flexray/flexray_coldstart.py
|
|
:language: python
|
|
:lines: 40-48
|
|
|
|
Configuration Example:
|
|
|
|
.. literalinclude:: ../../examples/python/flexray/flexray_coldstart.py
|
|
:language: python
|
|
:lines: 20-64
|
|
|
|
Setting Coldstart on Controller:
|
|
|
|
.. code-block:: python
|
|
|
|
controller.set_allow_coldstart(True)
|
|
controller.set_start_when_going_online(True)
|
|
|
|
Cleanup and Resource Management
|
|
================================
|
|
|
|
Always close the device when finished:
|
|
|
|
.. code-block:: python
|
|
|
|
try:
|
|
# Your FlexRay operations here
|
|
pass
|
|
finally:
|
|
device.close()
|
|
|
|
See the basic transmit and receive examples for complete implementations.
|
|
|
|
Additional Examples
|
|
===================
|
|
|
|
Transmit Basic
|
|
--------------
|
|
|
|
Complete working example with coldstart node transmitting simulated sensor data.
|
|
|
|
All example files are available for download:
|
|
|
|
**Transmit Basic** - Coldstart node transmitting simulated sensor data
|
|
|
|
:download:`flexray_transmit_basic.py <../../examples/python/flexray/flexray_transmit_basic.py>`
|
|
|
|
**Receive Basic** - Receiving and displaying FlexRay frames with formatted output
|
|
|
|
:download:`flexray_receive_basic.py <../../examples/python/flexray/flexray_receive_basic.py>`
|
|
|
|
**Coldstart** - Standalone coldstart example demonstrating network initialization
|
|
|
|
:download:`flexray_coldstart.py <../../examples/python/flexray/flexray_coldstart.py>` |