Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem MCP2517FD


von Not (Gast)


Lesenswert?

Hallo,
hat Jemand von euch lesenden mit dem Bauteil schon mal gearbeitet?
Gigantische Probleme seit Tagen mit dem Chip.
Nur um ein Beispiel zu nennen:
Lese Register aus. Inhalt 0x18.
Lese noch mal aus, 0x98 auf einmal.
Und so immer wieder, fast mit jedem Register. Irgendwelche Randomzahlen 
drin.
An der Auswertung kann es nicht lieger, der Logikanalyzer passt mit auf.

Und sonst ist das Datenblatt kompletter Müll, leider.
Deren API möchte ich aus mehreren Gründen nicht benutzen. Erst mal 
scheint die mir sehr ineffizient, zweitens funktioniert die (bei mir) 
nicht, drittens blicke ich da nicht durch, bzw kann die nicht verfolgen 
- kann eben nicht programmieren.

Möchte im Can Classic Mode erst mal benutzen, bevor es an CANFD geht.
Wegen größerer Datenmenge soll am Ende CANFD sein.

Habe aktuell keine konkrete Frage, bin einfach nur verwirrt.
Software Reset mit 0x00 0x00 scheint auch nicht wirklich einen Rest 
durchzuführen.
An der Hardware wird es wohl nicht liegen. Wie gesagt, habe einen 
Logikanalyzer parallel dran.

Eine konkrete Frage hätte ich vielleich doch. Muss man den internen Ram 
benutzen und initialisieren? Vorausgesetzt ich möchte keine verschickten 
Nachrichten etc. speichern.

Schreibe gerne meinen Initialisierungscode rein, bavor einer fragt.
Warum Initialisierung aktuell so ist, wie die ist- ist egal.
Das ist mittlerweile verbastelt alles :(
1
Microchip_SW_Reset();                           // SW Reset
2
Microchip_Reg_Write8(0x03, 0x04);               // Request Configuration mode, REQOP
3
Microchip_Reg_Write8(0xE00, 0x01);              // Pll Enable (clock input 4Mhz)
4
5
Orig_Reg_Value = Microchip_Reg_Read8(0);
6
CLEAR_BIT(Orig_Reg_Value, 5);                   // Delete ISOCRCEN bit 
7
Microchip_Reg_Write8(0, Orig_Reg_Value);        
8
9
// Setup timings nominal 500Kb
10
Microchip_Reg_Write8(0x04, 15);                 // sjw
11
Microchip_Reg_Write8(0x05, 15);                 // TSEQ2
12
Microchip_Reg_Write8(0x06, 62);                 // tseq1
13
Microchip_Reg_Write8(0x07, 0);                  // brp
14
// Setup timings data 500Kb
15
Microchip_Reg_Write8(0x08, 7);                  // sjw
16
Microchip_Reg_Write8(0x09, 7);                  // TSEQ2
17
Microchip_Reg_Write8(0x0A, 30);                 // tseq1
18
Microchip_Reg_Write8(0x0B, 1);                  // brp
19
20
Microchip_Reg_Write8(0x0E, 0x02);               // TDCMOD Auto
21
Microchip_Reg_Write8(0x0D, 62);                 // TDCO
22
23
24
// Setup TX FIFO
25
Microchip_Reg_Write8(0x53, 0);                  // Payload size 8 bytes, Fifo size 1
26
Orig_Reg_Value = Microchip_Reg_Read8(0x50);
27
SET_BIT(Orig_Reg_Value, 7);
28
Microchip_Reg_Write8(0x50, Orig_Reg_Value);     // Buffer is TX Buffer
29
Microchip_Reg_Write8(0x52, 0x61);               // Prio 1
30
31
32
//DRV_CANFDSPI_EccEnable();
33
34
DRV_CANFDSPI_RamInit(0xFF);                     
35
36
Microchip_Reg_Write8(0x03, 0x06);               // OP Mode Can Classic

Ist da überhaupt etwas richtig?
Danke schön

von Not (Gast)


Angehängte Dateien:

Lesenswert?

Beispiel:
OP Mode auslesen. Siehe Bild.
Was davor geschah:
1. Strom an
2. kurz warten.
3. SW Reset 0x00 0x00 und kurz warten
4. Request Configuration mode Reg 3, 0x04 und kurz warten
Paar Mal OP Mode auslesen.
Ein mal war 0x98 dazwischen, dann nur noch 0x00 als Status.
Configurationsmode angeblich verlassen. Warum? Durch was? Wieso das 
denn?

Kann diese Prozedur mehrmals wiederholen, es kommt immer was anderes 
raus.

LG

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

- Mit welcher Frequenz taktest du den MCP?
- Welche Frequenz hat Dein SPI-Takt?

Zitat aus dem Datenblatt:
"Note 1: The frequency of SCK has to be less than or equal to half the 
frequency of SYSCLK. This ensures that the synchronization between SCK 
and SYSCLK works correctly."

von Not (Gast)


Lesenswert?

>Mit welcher Frequenz taktest du den MCP?
mit 4 Mhz aus externer Quelle.
PLL Bit ist aktiviert, somit ist mein SYSCLK 40Mhz (hoffentlich)

>Welche Frequenz hat Dein SPI-Takt?
5Mhz.
Danke, das ist ein sehr guter Hinweis.
Microchip_Reg_Write8(0xE00, 0x01);
Wird gleich zu Anfang gemacht.
Aber wann wird es übernommen?
Ich stelle kurz 1Mhz zum Testen ein.

>Zitat aus dem Datenblatt
Dieses Datenblatt.... :(

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Not schrieb:
>>Mit welcher Frequenz taktest du den MCP?
> mit 4 Mhz aus externer Quelle.
> PLL Bit ist aktiviert, somit ist mein SYSCLK 40Mhz (hoffentlich)
>
>>Welche Frequenz hat Dein SPI-Takt?
> 5Mhz.
> Danke, das ist ein sehr guter Hinweis.
> Microchip_Reg_Write8(0xE00, 0x01);
> Wird gleich zu Anfang gemacht.
> Aber wann wird es übernommen?
> Ich stelle kurz 1Mhz zum Testen ein.
>
>>Zitat aus dem Datenblatt
> Dieses Datenblatt.... :(

PLLEN ist per default "0", also keine PLL und somit 4 MHz SYSCLK...

Du müsstest wohl während der Initialisierung des MCPs deinen SPI-Bus 
deutlich langsamer takten.

von Not (Gast)


Lesenswert?

Vielen Dank für Deine Antwort, hat mir sehr geholfen.

Habe gerade auf 1Mhz gestellt.
das Teil antwortet nun wenigstens immer gleich :(

Ich werde mich melden, wenn ich noch Probleme bekomme.
Schönes Wochenende

von Thomas F. (igel)


Lesenswert?

Not schrieb:
> Microchip_Reg_Write8(0x03, 0x04);

Der MCP2517 hat 32-Bit Register und 16-Bit Adressierung:
Üblicherweise sendet man zuerst die 16-Bit Registeradresse gefolgt von 
den 4 Datenbytes.

Funktioniert bei mir jedenfalls problemlos.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.