Comunicação via SPI

Todo o controle do rádio é feito através de comando enviados via SPI e através do pino SLP_TR. Existem seis tipos de comandos usados para se comunicar com rádio via SPI: Register Write, Register Read, Frame Buffer Write, Frame Buffer Read, SRAM Write e SRAM Read. O inicio do envio de cada comando é indicado setando o pino SEL para low e o fim é indicando setando o pino SEL para high.

O comando Register Write9 é utilizado para escrever nos registradores do rádio. O AT86RF230 possui um conjunto de registradores que são utilizados para configurar o seu funcionamento. Para escrever nos registradores envia-se pelo barramento um byte com cabeçalho indicando o comando e o endereço do registrador. O segundo byte enviado é o valor a ser escrito no registrador.

Figura 9: Transações no barramento SPI no comando Register Write
\scalebox{.55}{\includegraphics{at86_rw}}

O comando Register Read10 é semelhante ao anterior. Neste caso o segundo byte retornado é o valor do registrador.

Figura 10: Transações no barramento SPI no comando Register Read
\scalebox{.55}{\includegraphics{at86_rr}}

O comando Frame Buffer Write11 é utilizado para escrever no frame buffer do rádio um pacote a ser transmitido. O primeiro byte enviado indica o comando, o segundo byte é o campo PHR (tamanhodo pacote), e os bytes seguintes são os bytes referentes ao campo PSDU (os dados) do pacote.

Figura 11: Transações no barramento SPI no comando Frame Buffer Write
\scalebox{.55}{\includegraphics{at86_fbw}}

No comando Frame Buffer Read12, após o primeiro ter sido enviado, os bytes recebidos são referentes aos campos PHR e PSDU do pacote. Um byte é lido no final contendo informações referentes a qualidade do sinal para o pacote recebido.

Figura 12: Transações no barramento SPI no comando Frame Buffer Read
\scalebox{.55}{\includegraphics{at86_fbr}}

Os comandos SRAM Write e SRAM Read servem para acessar bytes especificos no frame buffer e não são usados.

Uma classe chamada AT86RF230_HAL foi criada para abstrair essa comunicação de baixo nível entre o rádio e o microcontrolador. A figura 13 apresenta métodos públicos da classe.

Figura 13: Interface pública da classe AT86RF230_HAL
\begin{figure}\begin{verbatim}static void init();
static unsigned char readReg...
...id setInterruptHandler(Machine::int_handler handler);\end{verbatim}
\end{figure}

Tiago Rogerio Muck 2009-07-08