Rolling change for ISO9141 slow initialization fix

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.

I quickly tried M2 on my car (ISO9141-2) to sniff the bus, but I wasn’t able to achieve much.
Just checked and I have the 1021 parts on my board.
Should I dive more into the code or could it be that this causes the issue?

TJA1021 won’t work with ISO9141, you need upgraded version of M2. Your chip works with ISO 14230 fast init (KWP2000 over K line).

Hey @RiDeLub, indeed you will want to use a M2 with the TJA1027 transceiver if you want to do the slow 9141 INIT - a handful of M2s with a TJA1021 transceiver were sent out early on. I’ll send you a PM so we can swap that unit out for you.

If anyone else is wanting to do slow INIT ISO9141 and has a M2 with a TJA1021 transceiver, let us know and we’ll swap it out.

Also, here is a great library that works with M2 and ISO9141:

My M2 shipped out September 29th, were the chips all replaced by then?

I am having trouble getting K-Line working. I would look at my M2 closely, but where is is installed in the car is hard to get to. I would prefer not to have to take it out of the car to look at if it is unlikely to have the old chip. Thanks.

EDIT: I got it to work, so I can only assume it has the TJA1027

Hey @crashmaxx , glad you got it to work. Looking forward to hearing more about your project.

For reference to anyone else - we sent out a email to everyone that received TJA1021 chips. If you didn’t get the email, you got the newest hardware!

And just a quick note for anyone having trouble getting ISO9141 to work - see this thread for Arduino library discussion: