Por que alguns microcontroladores têm atrasos tão grandes na sincronização?


11

Nos microcontroladores da série Atmel SAM-D21, muitos periféricos usam um relógio que é assíncrono ao relógio principal da CPU, e os acessos a esses periféricos devem passar pela lógica de sincronização; em periféricos cujo relógio é lento em relação ao tempo da CPU, isso pode adicionar alguns atrasos realmente enormes. Por exemplo, se o RTC estiver configurado para usar um relógio de 1024Hz (como parece ser a intenção do projeto) e a CPU estiver funcionando a 48Mhz, a leitura do registro "horário atual" fará com que a lógica do barramento insira mais de 200.000 estados de espera (no mínimo de cinco ciclos do relógio de 1024Hz). Embora seja possível que a CPU emita uma solicitação de leitura, execute algum outro código não relacionado e retorne mais de 200.000 ciclos mais tarde para buscar o tempo, não parece haver nenhuma maneira de realmente ler o tempo mais rapidamente.

Pelo meu entendimento da sincronização, um circuito de sincronização de bit único atrasará um sinal em 2-3 ciclos do relógio de destino; sincronizar uma quantidade de vários bits é um pouco mais difícil, mas há uma variedade de abordagens que podem garantir um comportamento confiável em cinco ciclos do relógio de destino, se for mais rápido que o relógio de origem, e apenas alguns ciclos a mais, se não for. O que o Atmel SAM-D21 estaria fazendo que exigiria seis ciclos no domínio do relógio de origem para sincronização e quais fatores favoreceriam um design cujos atrasos na sincronização sejam longos o suficiente para exigir uma interrupção "sincronização concluída", versus um que garanta os atrasos de sincronização são curtos o suficiente para tornar desnecessárias essas interrupções?


2
Obrigado por esta pergunta. Isso finalmente me fez entender o problema. Vim aqui porque não conseguia entender por que a limpeza do Watchdog Timer (WDT) levaria quase 5 milissegundos tremendos no SAMD20 / 21. Agora eu sei que é por design de hardware, não um erro meu. (O WDT tem clock de 1024 Hz, que é a única opção sensata.) Agora posso pelo menos lidar com isso de acordo.
T-Bull

2
@ T-Bull: A coisa realmente divertida sobre o watchdog nessas partes é que ele é desativado entre o horário em que o software emite o comando reset e o tempo em que o comando passa pelo sincronizador. Se o dispositivo entrar em suspensão durante esse intervalo, o cão de guarda não funcionará a menos ou até que outra coisa acorde a peça.
Supercat

Respostas:


2

Essa é uma maneira diferente de fazer as coisas comigo. Estou acostumado com minhas arquiteturas, onde meus registros estão no relógio da CPU ou pelo menos 1/2 desse relógio. Então você escreve seus registros e eles estão prontos imediatamente. Talvez eles estejam fazendo isso dessa maneira para economizar energia? Se eles estão colocando registros periféricos em seu próprio domínio de clock muito lento, talvez não precisem ativar e executar o oscilador principal ou o clock da CPU, mas podem continuar atualizando os valores no periférico.

Se for esse o caso, você poderá escrever um registro em seu bloco periférico super lento, desativar a ilha de energia de toda a CPU ou bloquear o clock e deixar o sincronizador lento lê-lo até ficar satisfeito e interromper a CPU para liberá-lo. de dormir.

Como alternativa, pode permitir que você insira a quantidade máxima de instruções no seu tempo de vigília, em vez de girar seis ciclos e aguardar cada gravação.

Por que eles usam tantos ciclos de sincronização, pode ser paranóia ou podem estar atendendo a algum alto padrão de confiabilidade de um de seus clientes. Não posso ter certeza, mas sei que já vi clientes com demandas como todas as ram, que devem ter ecc e serem pré-carregadas para um valor definido, etc.

Acho que essa não é uma resposta definitiva, mas esses são meus pensamentos depois de examinar um pouco a folha de dados.


2
Os "seis ciclos" são seis ciclos do relógio periférico; se você definir, por exemplo, o módulo de relógio em tempo real a ser alimentado em 1024Hz (o que parece ser a recomendação de Atmel) e o relógio da CPU estiver em 48MHz, seis ciclos do relógio periférico serão 281.250 ciclos do relógio da CPU, o que é muito longo hora de girar, especialmente se houver interrupções que precisem de manutenção. A rotação é apenas moderadamente horrível se o relógio lento for 8Mhz (o que significa uma rotação do ciclo de 36 CPU), mas uma falha grave seria melhor do que uma rotação em um relógio de 1024Hz.
Supercat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.