Jag sätter att min ECU har 0x22 som adress. Hur jag sätter det? Jag bara skriver in 22 som SA för ECU i ID-meddelandet.mrfrenzy skrev: ↑13 augusti 2020, 07:16:32 Det är lite förvirrande språk.
Den texten betyder att dom förutsätter att din ECU har adress 0x22.
ACU tar emot meddelanden FRÅN alla adresser
ACU skickar bara TILL adress 0x22 även om frågan kom från en annan adress.
Om du ska skicka ett meddelande från ECU till ACU blir SA=0x22 och DA=0x80.
När ACU skickar ett meddelande til ECU blir SA=0x80 och DA=0x22
Om din ECU skulle ha adress 0x11 så kommer ACU (felaktigt) ta emot ett meddelande med SA=0x11 och DA=0x80
Svaret kommer den skicka med SA=0x80 och DA=0x22 så du kommer aldrig se det.
Än fast ACU skickar endast till 0x22 så kan jag läsa exakt alla meddelanden på CAN-bus linan.
Med tanke på att jag kan göra Flow Control i J1939 så betyder det att jag kan faktiskt skicka meddelanden till ACU med 0x22. Men jag kunde även skicka meddelanden till ACU när jag satte ACU adressen till 0x8D av misstag.
Jag använder detta STM32 bibliotek. Fungerar utmärkt!hawkan skrev: ↑13 augusti 2020, 09:45:43 Här finns kod att titta på.
https://github.com/coryjfowler/MCP2515_lib som är j1939 utan att det nämns med ett ord (ojfr). Rad 600 finns en "write_id" man kan kolla hur de gör där.
copperhilltech.com har också massor om j1939. Källkod här http://copperhilltech.com/content/jCOM- ... e-Code.zip för exemplet här https://copperhilltech.com/blog/sae-j19 ... der-linux/
Inte exakt vad du frågar efter men om det är något fel du gör kanske koden kan hjälpa till för att jämföra.
https://github.com/eziya/STM32_SPI_MCP2515
Så här ser ett mottagande och sändande för mig https://github.com/eziya/STM32_SPI_MCP2 ... Src/main.c
Jag läser den där CAN-bus C koden du länkande till. Jag finner att min CAN-bus kod, mottar meddelanden olika. Jag skickar alltså inte med någon prioritet.
Kod: Markera allt
uCAN_MSG txMessage;
uCAN_MSG rxMessage;
CANSPI_Initialize();
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(CANSPI_Receive(&rxMessage))
{
txMessage.frame.idType = rxMessage.frame.idType;
txMessage.frame.id = rxMessage.frame.id;
txMessage.frame.dlc = rxMessage.frame.dlc;
txMessage.frame.data0++;
txMessage.frame.data1 = rxMessage.frame.data1;
txMessage.frame.data2 = rxMessage.frame.data2;
txMessage.frame.data3 = rxMessage.frame.data3;
txMessage.frame.data4 = rxMessage.frame.data4;
txMessage.frame.data5 = rxMessage.frame.data5;
txMessage.frame.data6 = rxMessage.frame.data6;
txMessage.frame.data7 = rxMessage.frame.data7;
CANSPI_Transmit(&txMessage);
}
txMessage.frame.idType = dSTANDARD_CAN_MSG_ID_2_0B;
txMessage.frame.id = 0x0A;
txMessage.frame.dlc = 8;
txMessage.frame.data0 = 0;
txMessage.frame.data1 = 1;
txMessage.frame.data2 = 2;
txMessage.frame.data3 = 3;
txMessage.frame.data4 = 4;
txMessage.frame.data5 = 5;
txMessage.frame.data6 = 6;
txMessage.frame.data7 = 7;
CANSPI_Transmit(&txMessage);
HAL_Delay(1000);
}