Hi,
We have done about 5 boards successfully with TM4C1299ENCPDT (QFP) using CAN, and have the same CAN circuit that has been used many times before. We have a new layout that uses TM4C129DNCZAD (BGA) and we cannot seem to get the CAN0 interface to work correctly. As far as I can tell, I cannot find any problems in my layout, but I am not ruling anything out.
Here are the symptoms:
Board #1
-Data comes in as expected on the CAN0Rx line from the CAN bus.
-CAN0Tx line stays high. No change in the state of CAN0Tx. I tried using a pull-up resistor or a pull down resistor and no difference was seen.
-Cut the connections to the onboard CAN transceiver (CAN0Rx and CAN0Tx). I wired in a known good external CAN transceiver module straight to the processor.
-After breaking the connection between CAN0Tx and the Tx input of the CAN transceiver circuit, the Tx input can be toggled high and low, so it is not shorted. Holding the input High lets bus traffic flow, and grounding it holds the bus. This is what I expect to see. Also after that connection was broken, CAN0Tx will drive low over and over again to attempt communication, but it will not work because it is not actually connected. This also seems correct. However, if you connect them together again, the CAN0Tx signal just stays high. It is as if the pin cannot drive the input the transceiver circuit.
-I could not find any specific input impedance of the inverter (that the processor CAN0Tx connects to) in its data sheet, however I assume it should be very high. This is the same transceiver circuit we always use but a new processor. I wanted to do a low drive strength test of the processor pin, so I externally took an op amp (AD822 with super high impedance inputs) and wired it as a single supply operation voltage follower with the CAN0Tx tied to the input, because if nothing else it should at least be able to drive the op amp. When I did this, the op amp output would follow the pulses on the Tx line, but that was still with the output of the op amp floating. When I connect the output of the op amp to the Tx input on the CAN transceiver circuit, the CAN0Tx (op amp input and output) driving the transceiver stay high again. The transceiver inverter input has already been verified that it is not shorted. My mind is totally boggled on this one. I have no idea if this is a hardware or software problem.
Board #2
This time I used the onboard CAN transceiver, but cut the CAN0Tx trace right before the CAN transceiver like I did before. I got the exact same results, except when I float the CAN transceiver Tx input, CAN0Tx doesn't try to pull low as much as on board #1. If I touch the wire to the floating transceiver input with my hand, the Tx line will start attempting to pull low, but when I let go it stops. Also, when I connect the lines back together again I get the same problem where they just stay high. I also tried inserting the op amp circuit and got the same results as board #1. I verified the transceiver input is not shorted and that I can toggle it.
The behavior is very strange. I am not ruling anything out. We have checked all the W10 and V10 GPIO and AFSEL registers for configuring CAN0 and they all look correct. I cannot find anything wrong in the layout. I cannot find any bad connections or voltages.
Any suggestions would be very helpful. I can have the software engineer provide the initialization code for CAN0 if that is helpful.
Thanks for your time.
Kevin