Hallo Arno,
On 05/09/2017 11:23 AM, star@gmx.li wrote:
du hast natürlich recht. Das mit den Protokoll (9bit Adresse + rw-bit + Daten) habe ich gelöst.
Für .bits_per_word werden andere Werte als 8 nicht akzeptiert, da bekomme ich eine Fehlermeldung.
Dann ist der spi-Treiber doof (oder die Hardware kann das nicht).
Ich pussele halt die Adresse, RW-Bit und Daten so in einen Buffer, dass es passt. Kommen halt am Ende ein paar Takte mehr. Sende 4x8bit für den Inhalt von 9+1+16. Aber das scheint kein Problem zu sein.
Sehe ich am Oszi so.
Was ich nicht hinbekommen habe ist, dass ich zum Lesen eine andere Flanke samplen muss!! (siehe Bild).
uah, ich weiß, Gewalt ist keine Lösung, aber der Hardware-Entwickler ...
Zwar gibt es
ret = ioctl(fd, SPI_IOC_WR_MODE, &mode); ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
aber ich sehe nur eine Reaktion auf die Änderung des Write modes ?!?
Wenn wir mal einen Hardware-Bug ausschließen: Was schreibst Du denn in mode rein? Für die erste Sequenz muss da CPOL=0 + CPHA=0 (also mode=0) und für die zweite Sequenz CPOL=0 + CPHA=1 (also mode=1) einstellt sein.
Das kriegst Du nur hin, wenn Dein Treiber die Verwendung von struct spi_ioc_transfer::cs_change unterstützt und selbst dann ist das hacky.
Liebe Grüße Uwe