Background:
Certain pre-CANbus car networks require an “initialization” scheme in order to tell the ECU to start communication; sort of like, “Hey ECU, I want to start a conversation!”
Typically, the cars requiring this scheme would be Chrysler, European, and Asian vehicles older than 2006.
In this case, some protocols that use the K-line (including ISO9141 and KWP2000) will initialize communication by pulling the signal LOW (from 12V to 0V) in a specific pattern. The ECU will recognize this pattern and know to expect a conversation with M2.
To allow our processor to communicate with a car at 12 volt levels, we employ a transceiver chip. The basic purpose of a transceiver chip is to convert the voltage levels of the processor (3.3V in our case) to the 12V levels the ECU expects. In addition, they provide protective mechanisms to prevent unwanted effects or damage during operation. Herein lies the issue we’ve encountered.
Issue:
We originally selected the “TJA1021” as our K-LINE/LIN transceiver chip. It is small, easy to implement and provides protection against short circuits, transients in the automotive environment and it is thermally protected.
It also has a “Transmit data (TXD) dominant time-out function.” According to the datasheet this feature “prevents the bus line from being driven to a permanent dominant state (blocking all network communication) if pin TXD is forced permanently LOW by a hardware and/or software application failure.”
Again, according to the datasheet, the time-out will occur between 27 and 90 ms, but typically around 55 ms. Here is a link to the datasheet:
Sure enough, after measuring via an oscilloscope, we see the timeout happening at a little more than 50ms.
Unfortunately, a slow initialization for some of these older K-line protocols requires a 400ms LOW pulse as part of the initialisation sequence and this time-out feature prevents that from happening. In practice, however, we’ve had good luck with the cars we tested and our emulators didn’t seem to notice the time-out feature. However, we’ve decided to make a running change during our production run to address this issue.
Solution:
Luckily, NXP offers a drop-in replacement part (TJA1027) that is pretty much the same as the TJA1021 but WITHOUT this time-out feature. No need for any PCB design changes - just a part swap out. Here is the datasheet:
Below is an image of our test board. The part on the left (U8) is the old TJA1021 while the part on the right is a the new TJA1027. Updated production units will have new part for both U7 and U8.
After swapping the part and running the same code as above, we see that the LOW pulse is now the full 400ms.
We’ll be sure to get in touch with anyone who has received M2 before this tweak. It will only affect those that plan on working with older cars. All other cases including LIN, CAN, SWCAN, etc. will not be affected. Lastly, a special shout-out to a forum member, @minDark, for pointing out this issue.