Search code examples
raspberry-pican-busbusj1939

J1939 RTR Issue


I have and issue with rtr frames using candump and cansend.

Dumping the broadcasted data is no issue.

Architecture - Raspberry pi with a pican shield reading data from a J1939 simulator.

I run candump to receive all messages on the bus. Then get an ack frame back from the simulator when I execute a cansend for pgn feec. Im requesting a preprogrammed VIN but I get nothing back. Here is what Im seeing from candump:

can0  18FEF500   [8]  7D FF FF 40 25 4B FF FF   '}..@%K..'
can0  18FEE900   [8]  D1 4B 03 00 D1 4B 03 00   '.K...K..'
can0  18FEF700   [8]  FF FF FF FF E0 01 FF FF   '........'
can0  18FECA00   [8]  03 FF 00 00 00 00 00 00   '........'
can0  00FEEC00   [0]  remote request
can0  18E80000   [8]  01 FF FF FF FF EC FE 00   '........'
can0  0CF00300   [8]  FF 7D 7D FF FF FF FF FF   '.}}.....'
can0  18FE6C00   [8]  FF FF FF FF FF FF 80 7D   '.......}'
can0  0CF00400   [8]  FF FF 7D 80 7D FF FF FF   '..}.}...''

The E800 PGN is a standard ack message.

And message I am sending while candump is running:

cansend can0 00feec00#r

Basically, I'm not getting the PGN for VIN back. Any ideas?


Solution

  • Turns out there are a couple of issues here.

    1- #r is not supported with J1939

    2- you don't request pgns by asking for that pgn directly. the method is to send data to a specific pgn which handles requests. example below:

    EA 00 is the PGN to send data to. Inside the data message lives the pgn we want to request (LSB) so PGN FEE5 is now E5FE. Three bytes are required which is why 00 is in the message below.

    Here is the working request for Engine Hours:

    cansend 18EA00FF#E5FE00
    

    and the reponse:

    21 00 00 00 8F 01 00 00