Hat hier schon mal jemand mit den STM32H7 SPI HW-Fifos gearbeitet ? 3 der H7 SPIs haben Sende und Empfangs Fifos von jeweils 16Bytes. Ich möchte die benutzen um externe registerbasierte Slaves (Full duplex) anzusteuern. Dazu muss ich 1 Byte Registeradresse senden und 3 Byte (24bit) Registerinhalt zurück lesen und das ganze für 3 Register, die nicht hintereinander liegen. Das ergibt insgesamt 3 Byte senden und 9 Byte zurück lesen. Von den Fifos her passt es. Nur die Frage ist lässt sich das so Konfigurieren das der H7 das ohne zutun von CPU oder DMA nur mit Hilfe des SPI Controllers macht und nur ein "fertig"(treshold ?) Interrupt liefert. Das ich den Empfangsfifo mehr als die Hälfte beschreibe stört nicht weil die Daten nicht kontinuierlich kommen sondern eine Pause dazwischen ist in der das Fifo geleert wird. Endziel wäre die Abfrage im 2,5µs Takt mit 3 SPI und 3 Slaves parallel ohne Interrupt Orgien zu machen.
Hans-Georg L. schrieb: > Dazu muss ich 1 Byte Registeradresse senden und 3 Byte > (24bit) Registerinhalt zurück lesen und das ganze für 3 Register, die > nicht hintereinander liegen. So wie ich Dich verstanden habe, kann das per DMA nur dann klappen, wenn die Übertragung mit nur einem durchgehenden /SS-Signal auskommt. Wird für jede neue Registeradresse ein neuer /SS-Zyklus benötigt, geht das wohl nur mit "TI mode transfer". Welchen Baustein willst Du denn auslesen?
m.n. schrieb: > Hans-Georg L. schrieb: >> Dazu muss ich 1 Byte Registeradresse senden und 3 Byte >> (24bit) Registerinhalt zurück lesen und das ganze für 3 Register, die >> nicht hintereinander liegen. > > So wie ich Dich verstanden habe, kann das per DMA nur dann klappen, wenn > die Übertragung mit nur einem durchgehenden /SS-Signal auskommt. Wird > für jede neue Registeradresse ein neuer /SS-Zyklus benötigt, geht das > wohl nur mit "TI mode transfer". > Welchen Baustein willst Du denn auslesen? Die Bausteine sind 3 x TDC7200 und soweit ich die H7 SPI verstanden habe sollte das direkt mit den eingebauten Hardware Fifos funktionieren. Das auslesen der Fifos kommt dann später mit oder ohne DMA. Muss ich wohl experimentieren wenn alles mal aufgebaut ist oder ein FPGA einsetzen. Das ganze soll so eine Art TAPR TICC werden nur mit 3 Kanälen und viel höherer Samplerate.
:
Bearbeitet durch User
Beim TDC7200 muß für jeden Zugriff auf eine wahlfreie Adresse CSB neu aktiviert werden. Das wird mit DMA wohl nicht klappen. Eine Kette von ISR-Aufrufen hingegen würde gehen oder auch ein Timer. Bei rund 500 MHz und Cache laufen ISRs recht flott! Die max. Abtastrate wird durch die max. SPI-Geschwindigkeit von 20 MHz begrenzt. Da würde auch ein schneller FPGA nicht helfen. Kleiner Trost: der TDC7200 läuft auch noch mit 25 MHz SPI-Takt. Wegen des Rauschens des TDC lohnt es sich nicht, den TDC_CAL2-Wert auszulesen und zu verrechnen. TDC_TIME1 und TDC_CAL1 reichen völlig aus. Bei drei Kanälen wäre der AS6500 evetuell eine Alternative. Das Teil hat vier Kanäle, rauscht deutlich weniger, misst ab 0 ns und hat die Ergebnisregister in direkter Reihenfolge bei höherer max. SPI-Frequenz (50 MHz), kann aber auch nur über einen einzigen SPI-Kanal angesprochen werden. Nur als Überlegung.
Ich muss ja sagen, dass ich nicht versuchen würde, 3 Spi Busse gleichzeitig mit diesem genauen Timing/Frequenz einzulesen. Die CPU hat bei mir oft noch etwas mehr zu tun, und dann kommt das gesamte System ausser Takt, wenn USB mal wieder dazwischen-interrupted. Ich würde wirklich ein FPGA nehmen, was die 3 Chips versorgt, und die Nutzdaten in einen internen Fifo/Buffer schreibt. Diese können dann in einem Block, asynchron von der CPU gelesen werden. Spi ist auf FPGA-Ebene nicht all zu kompliziert, und eine State-Maschine könnte ja alle 3 Slaves gleichzeitig bedienen, mit jeweils nur einer eigenen Miso Leitung.
PittyJ schrieb: > Die CPU hat bei mir oft noch etwas mehr zu tun, und dann kommt das > gesamte System ausser Takt, wenn USB mal wieder dazwischen-interrupted. USB hat eigene Puffer und kann daher mit geringer Priorität abgearbeitet werden. Aber das Problem ist ja auch (mal wieder) aus der Luft gegriffen. PittyJ schrieb: > Ich würde wirklich ein FPGA nehmen, was die 3 Chips versorgt, Um den Aufwand überschaubar zu halten, würde ich eher 3 x ATtiny nehmen, die den seriellen Datenstrom für die Ausgabe erledigen. Es sind ja immer konstante Befehle. Der Empfang kann über SPI + DMA im Hintergrund laufen. Letztlich kann das der H7 alles selber erledigen.
m.n. schrieb: > Beim TDC7200 muß für jeden Zugriff auf eine wahlfreie Adresse CSB neu > aktiviert werden. Das wird mit DMA wohl nicht klappen. Eine Kette von > ISR-Aufrufen hingegen würde gehen oder auch ein Timer. > Bei rund 500 MHz und Cache laufen ISRs recht flott! > > Die max. Abtastrate wird durch die max. SPI-Geschwindigkeit von 20 MHz > begrenzt. Da würde auch ein schneller FPGA nicht helfen. Kleiner Trost: > der TDC7200 läuft auch noch mit 25 MHz SPI-Takt. > Wegen des Rauschens des TDC lohnt es sich nicht, den TDC_CAL2-Wert > auszulesen und zu verrechnen. TDC_TIME1 und TDC_CAL1 reichen völlig aus. Bei meinen ersten Versuchen, vor 2 Jahren mit den TDC7200 habe ich auch festgestellt, das mehr Referenzzyklen nicht viel mehr bringen. Das Rauschen lag bei +/- 100ps max für einen single shot, 200ns Messzeit und Modus 1. Ein zusätzliche Referenzperiode muss ja mit gemessen werden weil der TDC nicht unter 12ns messen kann. > Bei drei Kanälen wäre der AS6500 evetuell eine Alternative. Das Teil hat > vier Kanäle, rauscht deutlich weniger, misst ab 0 ns und hat die > Ergebnisregister in direkter Reihenfolge bei höherer max. SPI-Frequenz > (50 MHz), kann aber auch nur über einen einzigen SPI-Kanal angesprochen In einem Thread in der time-nuts mailliste war der AS schlechter wie der TDC ... Der AS6500 war mir zu teuer, deshalb habe ich mir 2 AS6501 (2 Kanal) besorgt. Aber das wird ein weiteres Projekt, die werde ich aber nicht über SPI sondern über LVDS mit einem FPGA auslesen. Da will ich bei 10Mhz jede Periode samplen und in einen Histogram Speicher lesen. Aber erst mal ist der TDC7200 dran.
Hans-Georg L. schrieb: > In einem Thread in der time-nuts mailliste war der AS schlechter wie der > TDC ... Gib mir einen Link - die mache ich fertig! Es stimmt eben nicht. Siehe Anlage. Hans-Georg L. schrieb: > Der AS6500 war mir zu teuer, deshalb habe ich mir 2 AS6501 (2 Kanal) > besorgt. Bei Mouser war es genau anders herum; den AS6501 habe ich wegen der besseren Lötbarkeit genommen und weil zwei Kanäle reichten. > Aber das wird ein weiteres Projekt, die werde ich aber nicht > über SPI sondern über LVDS mit einem FPGA auslesen. LVDS ist ein starkes Argument! Wenn Du Erfahrungswerte hast, gib Bescheid.
m.n. schrieb: > Hans-Georg L. schrieb: >> In einem Thread in der time-nuts mailliste war der AS schlechter wie der >> TDC ... > > Gib mir einen Link - die mache ich fertig! > Es stimmt eben nicht. Siehe Anlage. > Ist schon lange her müsste ich erst wieder suchen ;-) > Hans-Georg L. schrieb: >> Der AS6500 war mir zu teuer, deshalb habe ich mir 2 AS6501 (2 Kanal) >> besorgt. > > Bei Mouser war es genau anders herum; den AS6501 habe ich wegen der > besseren Lötbarkeit genommen und weil zwei Kanäle reichten. > Ich kaufe auch bei Mouser, habe gerade nachgeschaut da habe ich was beim Preis verwechselt, die kosten das gleiche und der 6500 hat 4 Kanäle. Aber der 6500 hat nur 1 x SPI Kanal für alle 4 Eingänge und der AS6501 hat getrennte LVDS für jeden Eingang. >> Aber das wird ein weiteres Projekt, die werde ich aber nicht >> über SPI sondern über LVDS mit einem FPGA auslesen. > > LVDS ist ein starkes Argument! > Wenn Du Erfahrungswerte hast, gib Bescheid. Der 6501 kann bis 12.5 Mhz samples (16bit) über LVDS, single oder double data rate übertragen. Bei DDR ist der LVDS Takt nicht mehr so hoch und für Spartan6 oder Zynq Boards, die ich hier habe, und den serdes gut zu bewältigen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.