Sida 2 av 3

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

Postat: 12 juli 2020, 23:44:43
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.

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

Postat: 12 juli 2020, 23:53:15
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.

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

Postat: 13 juli 2020, 00:04:06
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.

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

Postat: 13 juli 2020, 01:17:31
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.

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

Postat: 13 juli 2020, 01:20:01
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.

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

Postat: 13 juli 2020, 10:37:43
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.

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

Postat: 13 juli 2020, 16:35:45
av DanielM
Det framgår endast att SA är source address och DA är destination address.

ACU = Motor
ECU = STM32

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

Postat: 13 juli 2020, 17:13:11
av sodjan
Ja, i J1939, men inte i CAN, vilket du frågade om från början.

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

Postat: 13 juli 2020, 17:30:06
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.

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

Postat: 13 juli 2020, 18:25:18
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...

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

Postat: 16 juli 2020, 15:57:41
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:

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

Postat: 4 augusti 2020, 17:26:32
av DanielM
Det fungerar!!! :D

Sonceboz Sense
smart-linear-actuator.jpg

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

Postat: 5 augusti 2020, 12:38:49
av Rick81
Bra. Hur löste du det?

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

Postat: 5 augusti 2020, 12:49:50
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

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

Postat: 8 augusti 2020, 01:15:43
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