MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Så vitt jag kommer ihåg från då jag läste om CAN, så har man inte direkt
några "adresser". CAN protokollet jobbar med meddelande ID och sändaren
sänder i princip till alla. Varje CAN node ansvarar sedan för att sätta upp ett
filter så att endast de relevanta meddelandena (för den noden) släpps igenom.

Att du har ett "dokument" som talar om adresser är ju ganska ointressant om
inte även vi får en möjlighet att se vad de skriver.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 14819
Blev medlem: 16 april 2006, 17:04:10

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av mrfrenzy »

Det är en mycket stor fördel att använda en standard som J1939 eller CANopen. Då slipper man många timmars arbete varje gång det ska integreras en ny produkt.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Ja, dessa standards handlar bl.a. om att ha kända och fasta meddelande ID
för kända typer av meddelanden. Så både tillverkaren av motorboxen och av
oljetrycksgivaren vet vilket message-ID som "oljetryck" har.

Vore dock fortfarande vara intressant att se vad de där DA och SA är för något.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Det är J1939 protokollet.
mrfrenzy skrev:Det är en mycket stor fördel att använda en standard som J1939 eller CANopen. Då slipper man många timmars arbete varje gång det ska integreras en ny produkt.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Rick81 skrev:Du visar inte dokument men jag tror att SA är den som skickar och DA den som tar emot meddelandet. Så beroende på vem som skicka blir SA och DA olika.

Ex skickar STM32 till motor blir:
SA = STM32
DA = motor

Skickar motor till STM32:
SA = motor
DA = STM32

Kan det vara därför du tycker de blandar ihop det?
Så kan det vara! Så varje enhet måste ha en DA och en SA?

Protokollet är enormt. Tror ni kommer inte förstå det om jag laddar upp det.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Du kan väl bara citera någon relevant del som talar om SA och DA.

Men jag tror att jag förstår... SA/DA är del av J1939, vilket är en
implementering ovanpå CAN. CAN i sig vet inget om SA/DA, de har
bara plockat en del av "CAN Message ID" och kallar det SA/DA.

Du sa ingenting om J1939 från början, enbart CAN, och då är
SA/DA inte relevant.

> Så varje enhet måste ha en DA och en SA?

Det framgår väl av J1939 dokumentationen, gör det inte?
Och ja, J1939 är komplext. Betydligt mer komplext än själva
CAN kommunikationen i sig.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Det framgår endast att SA är source address och DA är destination address.

ACU = Motor
ECU = STM32
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Ja, i J1939, men inte i CAN, vilket du frågade om från början.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jag vet inte vad som är skillnaden? CAN är väll hårdvaran och J1939 är väll hur saker ska talas fram och tillbaka?

Jag tror att Sonceboz använder en modifierad J1939 med tanke på att J1939 så skickar man data i from av 8 bytes. Sonceboz protokoll så kan man skicka data i 9 bytes.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43152
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Man kan säga ungefär att:
CAN=TCPIP
J1939=TCPIP + HTTP protokollet
Inte helt korrekt, det går ju alldeles utmärkt att köra CAN utan en påbyggnad så som tex J1939.
Att CAN enbart är hårdvara är så klart helt fel, CAN är ett komplett kommunikations protokoll i sig självt...
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jag återkommer med mer svar och troligtvis så hittar jag ett sätt att styra denna. Då delar jag ut källkoden till er alla här. Men just nu inväntar jag en 24 volt spänningsmatare innan jag kan fortsätta. :tumupp:
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Det fungerar!!! :D

Sonceboz Sense
smart-linear-actuator.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av Rick81 »

Bra. Hur löste du det?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jag sökte reda på source address. Den skickas från enheten vid start. 0x8d är den.

Standard är 0x22.

Sedan var det lite bit hit och dit. :)

Denna fungerar utmärkt för J1939.
https://github.com/eziya/STM32_SPI_MCP2515
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Hej!

Här är J1939 protokollet för att sätta adresser på olika CAN-bus enheter. Detta är inget som Sonceboz själv har hittat på.
TCI SENSE 42 Version 3.0-34-38.pdf
För att skicka t.ex 9 bytes via CAN-bus så använder man något som heter BAM.
Markering_042.png
Till att börja med så tittar vi på den översta raden.
Markering_045.png
ID:
1C - Indikerar prioritet 7. Jag vet inte vad det ska betyda, men det är viktigt att man har med den i meddelandet.
ECFF - Startar överföringensmetoden PGN 60416
22 - Det är våran nuvarande adress

Byte 1..8:
Byte1: 20 - Detta betyder att vi använder oss av BAM för att skicka mer än 8 bytes
Byte2: 9 - Detta betyder att vi ska skicka 9 bytes
Byte3: 0 - Vet ej vad denna betyder. Men den ska tydligen vara 0
Byte4: 2 - Detta betyder att vi skickar 2 paket av 8 bytes.
Byte5: FF - Reserverad
Byte6 - > Byte8: 00FED8 (LSB först, MSB sist) betyder någon typ av PNG. Jag har inte koll på vad den är.

Nu tittar vi på detta
Markering_044.png
Första paketet:
Byte1: 1 - Paket nummer 1
Byte2 -> Byte8: Våran data där FF är oanvänd data

Andra paketet:
Byte1: 1 - Paket nummer 2
Byte2 -> Byte8: Våran data där FF är oanvänd data

Informationen har jag fått från: https://copperhilltech.com/blog/sae-j19 ... e-j193921/

Fråga:
Tror ni också att 0x81 är den nya adressen?
Slutsats.png
Jag har inte koll på SA = Source address och DA = Destination address. Jag tycker protokollet blandar ihop detta. Vad säger J1939?
Source address.png
Enligt https://copperhilltech.com/blog/sae-j19 ... e-j193921/ så är 22 ECU's source address.
Enligt detta protokoll(som ej är bifogat i PDF:en) så är ACU = Acturator Controller Unit och ECU = Electronic Controller Unit. Jag vet inte vad det betyder.

Kan det vara så att min ECU är själva MCP2515 CAN-bus IC-kretsen?
Markering_050.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar