Dlaczego niektóre mikrokontrolery mają tak duże opóźnienia synchronizacji?


11

W mikrokontrolerach serii SAM-D21 Atmel wiele urządzeń peryferyjnych używa zegara, który jest asynchroniczny z zegarem głównego procesora, a dostęp do tych urządzeń peryferyjnych musi odbywać się za pomocą logiki synchronizacji; na urządzeniach peryferyjnych, których zegar jest wolny w stosunku do czasu procesora, może to spowodować naprawdę duże opóźnienia. Na przykład, jeśli RTC jest skonfigurowany do korzystania z zegara 1024Hz (jak wydaje się być celem projektu), a procesor pracuje z częstotliwością 48 MHz, odczyt rejestru „aktualny czas” spowoduje wstawienie przez logikę magistrali ponad 200 000 stanów oczekiwania (minimum pięciu cykli zegara 1024Hz). Chociaż możliwe jest, że CPU wyda żądanie odczytu, wykona jakiś inny niepowiązany kod i zwróci ponad 200 000 cykli później, aby pobrać czas, wydaje się, że nie ma sposobu, aby faktycznie odczytać czas szybciej.

W moim rozumieniu synchronizacji, jednobitowy obwód synchronizujący opóźni sygnał o 2-3 cykle docelowego zegara; synchronizacja wielobitowej ilości jest nieco trudniejsza, ale istnieje wiele podejść, które mogą zagwarantować niezawodne zachowanie w ciągu pięciu cykli zegara docelowego, jeśli jest on szybszy niż zegar źródłowy, i tylko kilka cykli więcej, jeśli nie jest. To, co robiłby Atmel SAM-D21, wymagałoby sześciu cykli w źródłowej domenie zegarowej do synchronizacji i jakie czynniki sprzyjałyby projektowi, którego opóźnienia synchronizacji są na tyle długie, że wymagają przerwania „synchronizacji wykonanej”, w porównaniu z takim, który zapewnia opóźnienia synchronizacji są wystarczająco krótkie, aby uczynić takie przerwania niepotrzebnymi?


2
Dziękuję za to pytanie. Dzięki temu w końcu zrozumiałem problem. Przybyłem tutaj, ponieważ nie mogłem zrozumieć, dlaczego wyczyszczenie Watchdog Timer (WDT) zajmie prawie 5 ogromnych milisekund w SAMD20 / 21. Teraz wiem, że jest to projekt sprzętowy, a nie mój błąd. (WDT ma taktowanie 1024 Hz, co jest jedyną sensowną opcją.) Teraz mogę przynajmniej odpowiednio sobie z tym poradzić.
T-Bull

2
@ T-Bull: Naprawdę zabawne jest to, że watchdog w tych częściach jest wyłączony między czasem, w którym oprogramowanie wydaje polecenie resetowania, a czasem, w którym polecenie przechodzi przez synchronizator. Jeśli urządzenie przechodzi w stan uśpienia podczas tego przedziału, watchdog nie będzie działać, chyba że albo aż coś indziej obudzi części.
supercat

Odpowiedzi:


2

To inny sposób robienia mi rzeczy. Przyzwyczaiłem się do architektur, w których moje rejestry znajdują się na moim zegarze procesora lub co najmniej 1/2 tego zegara. Więc piszesz swoje rejestry i są gotowe od razu. Może robią to w ten sposób, aby oszczędzać energię? Jeśli umieszczają rejestry peryferyjne we własnej osobnej, naprawdę wolnej domenie zegara, być może nie muszą się budzić i uruchamiać głównego oscylatora lub zegara procesora, ale mogą aktualizować wartości na urządzeniu peryferyjnym.

W takim przypadku możesz zapisać rejestr w swoim bardzo wolnym bloku peryferyjnym, a następnie wyłączyć wyspę zasilania dla całego procesora lub bramy zegarowej i pozwolić powolnemu synchronizatorowi odczytać go, aż będzie szczęśliwy, a następnie przerwać procesor, aby go wyciągnąć snu.

Ewentualnie może pozwolić ci wcisnąć maksymalną liczbę instrukcji w czas przebudzenia, zamiast obracać sześć cykli i czekać na każdy zapis.

To, dlaczego używają tak wielu cykli synchronizacji, może być paranoją lub spełniać wysokie standardy niezawodności dla jednego ze swoich klientów. Nie mogę powiedzieć na pewno, ale wiem, że widziałem klientów, którzy mają takie wymagania, jak każdy taran powinien mieć ECC i być wstępnie załadowany do określonej wartości itp.

Wydaje mi się, że nie jest to ostateczna odpowiedź, ale takie są moje przemyślenia po lekkim przejrzeniu arkusza danych.


2
„Sześć cykli” to sześć cykli zegara peryferyjnego; jeśli ustawimy np. moduł zegara czasu rzeczywistego, który ma być zasilany z częstotliwością 1024 Hz (wydaje się to zaleceniem Atmela), a zegar procesora ma częstotliwość 48 MHz, sześć cykli zegara peryferyjnego będzie wynosić 281 250 cykli zegara procesora, który jest okropnie długi czas na wirowanie, szczególnie jeśli są jakieś przerwy wymagające serwisowania. Wirowanie jest tylko okropnie okropne, jeśli wolny zegar wynosi 8 MHz (co oznacza wirowanie w cyklu 36 CPU), ale trudna usterka byłaby lepsza niż spin na zegarze 1024Hz.
supercat,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.