Authors
--------
-Max Staudt <elmcan@enpas.org>
+Max Staudt <max-linux@enpas.org>
into full-fledged (as far as possible) CAN interfaces.
Since the ELM327 was never meant to be a stand-alone CAN controller,
-the driver has to switch between its modes asa quickly as possible in
+the driver has to switch between its modes as quickly as possible in
order to approximate full-duplex operation.
As such, elmcan is a best-effort driver. However, this is more than
+Requirements
+-------------
+
+This requires Linux 4.11 (for 431af779256c), and has been tested on 4.19.
+
+
+
Data sheet
-----------
--noparity \
--onestopbit \
--iflag -ICRNL,INLCR,-IXOFF \
- 26 \
+ 29 \
/dev/ttyUSB0
To change the ELM327's serial settings, please refer to its data
+Module parameters
+------------------
+
+- ``accept_flaky_uart`` - Try to live with a bad controller or UART line
+
+ Some adapters and/or their connection are unreliable. Enable this
+ option to try and work around the situation. This is a best-effort
+ workaround, so undefined behavior will likely occur sooner or later.
+
+ LOAD TIME::
+
+ module/kernel parameter: accept_flaky_uart=[0|1]
+
+
+
Known limitations of the controller
------------------------------------
+- Clone "v1.5" devices
+
+ Sending RTR frames is not supported and will be dropped silently.
+
+ Receiving RTR with DLC 8 will appear to be a regular frame with
+ the last received frame's DLC and payload.
+
+ "``AT CSM``" not supported, thus no ACK-ing frames while listening:
+ "``AT MA``" will always be silent. However, immediately after
+ sending a frame, the ELM327 will be in "receive reply" mode, in
+ which it *does* ACK any received frames. Once the bus goes silent
+ or an error occurs (such as BUFFER FULL), the ELM327 will end reply
+ reception mode on its own and elmcan will fall back to "``AT MA``"
+ in order to keep monitoring the bus.
+
+
- All versions
No automatic full duplex operation is supported. The driver will
helpful here, however SocketCAN does not currently provide a facility
to make use of such hardware features.
-- No BUS-OFF state and automatic restart
-
- We currently reset the ELM327 and generate error frames manually.
- In the future, we may be able to use ``can_bus_off()`` and its siblings.
-
Communication example
ID sending mode (using "``AT PB``", see code or datasheet).
-Once a frame has been sent and wait-for-reply mode is on (ATR1,
-configured on listen-only=off), or when the reply timeout expires and
+Once a frame has been sent and wait-for-reply mode is on (``ATR1``,
+configured on ``listen-only=off``), or when the reply timeout expires and
the driver sets the controller into monitoring mode (``ATMA``), the ELM327
will send one line for each received CAN frame, consisting of CAN ID,
DLC, and data::
-To Do list for future development
-----------------------------------
+Rationale behind the chosen configuration
+------------------------------------------
+
+``AT E1``
+ Echo on
+
+ We need this to be able to get a prompt reliably.
+
+``AT S1``
+ Spaces on
+
+ We need this to distinguish 11/29 bit CAN addresses received.
+
+ Note:
+ We can usually do this using the line length (odd/even),
+ but this fails if the line is not transmitted fully to
+ the host (BUFFER FULL).
+
+``AT D1``
+ DLC on
-- Rename ``elm327_panic()``
+ We need this to tell the "length" of RTR frames.
-- No auto-restart in ``elm327_panic()``?
-- Stop current function when in ``elm327_panic()``
+
+A note on CAN bus termination
+------------------------------
+
+Your adapter may have resistors soldered in which are meant to terminate
+the bus. This is correct when it is plugged into a OBD-II socket, but
+not helpful when trying to tap into the middle of an existing CAN bus.
+
+If communications don't work with the adapter connected, check for the
+termination resistors on its PCB and try removing them.
+
+
+
+To Do list for future development
+----------------------------------
- DMA capable rx/tx buffers
+ (is this relevant for this driver?)
- flushing of ``tx_work`` is too late in ``ldisc_close()``
+ (is this still the case?)