Federerer napisał(a):
nie wyłączasz przerwania od SPI i co bajt sprawdzasz warunek
Tak, ponieważ w pierwszej wersji robiłem tak jak proponujesz i moment włączenia SPI powodował zakłócenia - zgubienie lub przekłamanie na pierwszym znaku po zakończeniu transferu DMA.
Cytuj:
Tak z ciekawości, ten xor jest do sprawdzania poprawności transmisji?
Tak właściwie to chciałem podzielić transmisję na dwa etapy - pierwszy "sterujący" w którym ustalane są parametry transmisji - ten obsługuję przerwaniem, a drugi to dane - ten obsługuję DMA. CRC dla transferu DMA liczy się "w locie", do sprawdzania poprawności pierwszego planowałem użyć XOR.
Cytuj:
Widzę, że kolega pisze coś do dcc

Gdzie tam się używa SPI do transmisji sygnałów?
Tak, to będzie centralka DCC. I masz rację, w DCC nie używa się SPI
Ale jakoś te dane, trzeba do niej dostarczyć.
Aktualnie porzuciłem ten pomysł i eksperymentuję z innym. Plan jest taki, żeby w całości do transmisji użyć DMA i przesyłać całe "bloki pamięci". Problem polega na tym, że taki blok stanowi niepodzielną jednostkę dla programu. Trochę się obawiam, co się stanie jeśli w trakcie transmisji "zgubię" bajt lub dwa. DMA czeka na ściśle określoną ilość bajtów i może to doprowadzić do sytuacji że bloki przesuną się względem siebie. Próbuję teraz określić czy mógłbym poprzez sprawdzanie zmian pinu SS określić czy transmisja nie zakończyła się wcześniej niż się tego spodziewa DMA.
Czy ktoś z was może wie, czy linuksowy driver SPI może podzielić transmisję SPI na mniejsze elementy ?
Czy na przykład wysyłając 100 bajtów zostaną one dostarczone jako całość w trakcie jednej zmiany SS ? Czy też możliwa jest sytuacja, że zostaną podzielone np na dwa bloki po 50 bajtów i przesłane w dwóch zmianach SS.