Gast
#3943578
Hallo, derzeit benutze ich den TWI vom SAM4 über die ASF Funktionen. Anfangs war es etwas holprig wie manche hier vielleicht wissen und zu guter letzt laufen nun TWI0 und 1. Dachte ich zummindest :) Slaves sind PCA9555PW als IO-Erweiterungen. Ich habe die Elektronik mal länger laufen lassen. Es sollte nur eine LED am IO Extender getoggelt werden im sekundentakt. Dazu lese ich jeweils den aktuellen Portzustand (von Port 1 und Port 0). Toggle das entsprechende Bit der LED und schreibe Port 1 und Port 0 wieder zurück. Das ganze funktioniert eigentlich, nur nach etwa 15min bis 3Std habe ich es jetzt regelmäßig erlebt, dass ich der TWI beim lesen der Ports aufhängt. In der twi_master_read kommt er in der while(cnt>0) nicht weiter. Der Master soll zwei Bytes lesen. Bereits nach dem ersten Byte gibt der Master ein NACK und sendet STOP wobei die Funktion erst ein Byte empfangen hat, welches auch noch im TWI_RHR liegt. Die Variable cnt ist aber noch auf 1. Und gefühlte Tausendmal geht es auch ohne Probleme bis genau dieses Problem auftritt. Hatte soetwas schonmal einer in der Form? Ich weiß nicht so recht ob ich den PCA9555 verdächtigen soll oder die ASF TWI Routine die "eigentlich" funktioniert. Ein letztes Oszilloskopbild konnte ich auch bekommen. Habe die Infos mal zusammgestellt und als Bild angehängt. Der Aktuelle Staus der Variablen ist auch als Screen angehängt, sowie die TWI-Register. An der Adresse 0x200036E0 steht 0xff (dieses Byte hat er empfangen) und 0x200036E1 ist auf 0x00 (hat ermeiner Meinung nach auch noch nicht gelesen, also irgendwas im Speicher). Die twi_master_read() schaut so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
Habe schon die Taktrate von 50kHz bis 300kHz variiert und konnte keinen Unterschied feststellen. Gefühlt hängt er schneller mit kleineren Taktraten, als mit schnellen. Aber das ist nur so ein Gefühl. Mit und ohne Debugger habe ich es auch probiert. Hängt sich in beiden fällen auf. PS: Erschreckt euch nicht bei dem Oszibild. Ich habe einmal "gezoomt" und da steht mein Scope garnicht drauf. Darum ist SCL etwas spitz geworden und geschwungen. Schaut live schön glatt und eckig aus.


