Chip Select nach jedem Byte

Gast #6693600
Hallo,

ich sehe es immer häufiger, dass bei manchen SPI Slaves (z. B. bei 
einigen ethernetbasierten Protokollchips) nach jedem Byte auf der SPI 
erwarten, dass man den CS setzt/rücksetzt.
Ist gerade beim Senden von vielen Daten nervig, da man das ganze quasi 
als ineffiziente for-Loop aufziehen muss.

Dass es gemacht werden muss, weil der Hersteller es vorschreibt und es 
sonst nicht funktioniert ist klar. Aber weiß jemand, warum das aus Sicht 
des Herstellers notwendig ist?
Gast
CS nach irgendwann einmal loszulassen, zum Beispiel nach einem ganzen 
Datenpaket, ist sinnvoll. Damit werden die Transceiver neu 
synchronisiert. Falls der Empfänger zum Beispiel eine Taktflanke durch 
eine Störung nicht mitbekommen hat.

Dies nach jedem Byte zu tun, ist allerdings sehr ungewöhnlich.
Gast
Peter D. schrieb:
> Milton schrieb:
>
>> Aber weiß jemand, warum das aus Sicht
>> des Herstellers notwendig ist?
>
> Da Du den Chip nicht nennst, mußt Du den Hersteller fragen.
> Die Hellseher sind grad in Urlaub.

Beispielsweise der netX90.
Milton schrieb:
> Peter D. schrieb:
>> Milton schrieb:
>>
>>> Aber weiß jemand, warum das aus Sicht
>>> des Herstellers notwendig ist?
>>
>> Da Du den Chip nicht nennst, mußt Du den Hersteller fragen.
>> Die Hellseher sind grad in Urlaub.
>
> Beispielsweise der netX90.

Das ist Unsinn. Der netX90 ist kein "Netzwerkcontroller" sondern ein SoC 
für industrielle Kommunikationsanwendungen. Die Kernaufgabe ist nicht 
das Versenden von Netzwerktelegrammen. (Kann er auch, aber dafür wohl 
etwas überdimensioniert) Das SPI Interface ist nicht optimal, aber 
mitnichten muss man nach jedem Byte das CS Signal loslassen, sondern 
genau das Gegenteil ist der Fall. Ich zitiere mal aus dem Ref-Manual:

| ... The chip-select signal must permanently remain active during
| an access sequence (an inactive chip-select will terminate a transfer).

Das übliche Interface zu dem Chip ist auch nicht SPI. Normalerweise 
implementiert man seine Applikation auf dem im netX90 integrierten 
Cortex-M4. (Er hat zwei, einen für die Applikation, einen für die 
Protokollfirmware - die kommt von uns)

Der Chip hat übrigens nicht nur zwei Cortex-M4 sondern noch 10 weitere 
Cores und zwei integrierte Ethernet Phys ich würde also nicht unbedingt 
von einem "µC" sprechen. Um genau zu sein ist es ein Software-Defined 
Switch mit für Industrieaufgaben ausgesuchten Peripherien.

Rolf M. schrieb:
> und ist eigentlich ein Werbe-Prospekt. Wo findet man denn da etwas, das
> man auch wirklich als Datenblatt bezeichnen kann?

https://kb.hilscher.com/pages/viewpage.action?pageId=112430702
Gast
Milton schrieb:
> Ist gerade beim Senden von vielen Daten nervig, da man das ganze quasi
> als ineffiziente for-Loop aufziehen muss.

Hast Du denn schon mit einem solchen Chip gearbeitet? Oder war das eine 
rein theoretische Frage. Oder nimmst Du so einen Chip gerade in Betrieb.
Gast
Milton schrieb:
> Aber weiß jemand, warum das aus Sicht
> des Herstellers notwendig ist?

Damit es auch mit 8 bit CPU/µC funktioniert?! SPI stammt aus dem Jahre 
1987.

>Ist gerade beim Senden von vielen Daten nervig, da man das ganze quasi
>als ineffiziente for-Loop aufziehen muss.

Aus Sicht eines Hardware-Entwicklers ist das beschriebene bit-banging an 
sich ineffektiv (aber flexibel). Besser ist es, dedizierte 
SPI-Master-Hardware zu verwenden, die das ganze auch noch per DMA an der 
CPU vorbei transferiert.

https://de.wikipedia.org/wiki/Bit-Banging


> https://kb.hilscher.com/pages/viewpage.action?pageId=112430702
Auf seite 139 hat es ein timing diagramm für transfers ohne CS-wackler.
Gast
Matthias S. schrieb:
> Hängt oft vom Slave ab. Manche Slaves latchen mit der steigenden Flanke
> von /SS die Daten intern in die Register.

Ja. Aber genau da spielt man ja alle Daten erstmal ein und Deselect 
dann.

Ein Device, dass jedes Byte mit einem Deselect abschließt, braucht 
filigrane andere Mechanismen zur Kompensation um z.B. Steuerkommandos 
und Daten zu unterscheiden, mehr als 8-Bit-Werte zu übertragen oder 
überhaupt gezielt daten zu lesen.

Mit durchgehendem CS können die ersten 1,2 oder mehr Bytes als 
Steuerkommandos, Leseadresse oder was immer interpretiert werden. Bei 
dauerndem CS gibt es kein erstes, zweites, ... Byte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.