Hallo Arno,
On 05/10/2017 11:42 AM, Arno Steffens wrote:
Die Fehlerbehandlung im spi-Framework ist bescheiden, deswegen wird das cs_change vielleicht ignoriert. Lesen ginge ungefähr so:
/* transfer address, keeping CS active at the end */ transfer.cs_change = 1; transfer.bits_per_word = 10; transfer.len = 1; ioctl(..., &transfer);
/* switch mode */ mode = 1 ioctl(fd, SPI_IOC_WR_MODE, &mode);
/* read datum */ transfer.cs_change = 0; transfer.bits_per_word = 16; transfer.len = 1; ioctl(..., &transfer);
Vermutlich ist es einfacher das Protokoll mit gpio-bitbanging zu implementiern als einen spi-Treiber dazuzubekommen, das so zu machen, wie es muss.
Ja, so hab ich mir das auch gedacht. Das cs_change halt das CS auch schön low zwischen den Transfers. War schon mal ein guter Tip! Hilft aber nur dann richtig, wenn ich tatsächlich die bit_per_word auf 10 setzen kann.
Oder einen Teiler von 10. 5 könnte (von Seite der Hardware) unterstützt werden.
Auf bitbanging hab ich wenig Lust. Geht das unter Linux überhaupt schnell genug? Das klingt nach ganz viel Arbeit.
Kommt drauf an, was "schnell genug" heißt. Und wie wichtig es ist, es richtig zu machen. Einen Userspace-Treiber zu schreiben, der per gpioctl Lese- und Schreibzugriffe macht, klingt nach einem Arbeitstag für einen Prototypen und vielleicht noch einen Tag um die Fehlerbehandlung sauber zu machen und ausgiebig zu testen.
Vielleicht ist es am zielführendsten mal den Gerätehersteller anzurufen und sich (hoffentlich) bestätigen zu lassen, dass man mit mode0 auch vorgehen darf und dass die zusätzlichen clks am Ende nicht schaden.
Liebe Grüße Uwe