Um celular, um aparelho de TV, um micro-ondas ou mesmo um satélite têm em comum uma arquitetura parecida. Todos contam com um processador principal, que pode ser um SoC ou um microcontrolador, memória de acesso aleatório (RAM), para execução dos programas, memória de gravação permanente (ROM), que contém os programas que não são apagados após desligamentos, e os periféricos conectados a interfaces de expansão. Um SoC (System on a Chip) é um circuito integrado que integra vários compo- nentes de um computador, além de possíveis funções como entradas/saídas digitais e analógicas, de rádio frequência, tudo isso em apenas um único encapsulamento, que pode ou não conter mais de um die, capaz de executar sistemas operacionais complexos como Microsoft Windows e Linux, com exceção de memória que geralmente é utilizada em cir- cuitos separados. Um microcontrolador também é constituído por diversos componentes em apenas um encapsulamento, como memória RAM, memória ROM, entradas e saídas, conversores digitais analógicos e analógicos digitais, no entanto, geralmente contando com poucos kB de memória e processadores com capacidade muito limitada.
A maioria dos microprocessadores utiliza a arquitetura Von Neumann, onde o pro- grama a ser executado e os dados são armazenados na mesma memória, no caso a RAM. A arquitetura conhecida como Harvard armazena o programa em uma memória permanente (ROM) e os dados em outra memória (RAM) (48). No geral, mesmo na arquitetura Von Neumann, o programa não é modificado em tempo de execução, por incorrer em demasi- ada complexidade e problemas de segurança. Como o conteúdo da RAM é perdido com o desligamento do computador, na Von Neumann ele é copiado de outro meio como um disco rígido ou memória Flash para a RAM e então o processador passa a executar o pro- grama. Repare na diferença: na Harvard ele é executado diretamente na ROM, enquanto na Von Neumann ele é copiado para a RAM antes. A ROM geralmente é uma memória Flash ou EEPROM, que tem uma quantidade limitada de gravações e pode ser necessá- rio condições especiais para gravação, como uma maior tensão de alimentação, portanto limitando a capacidade de atualizar o Firmware em tempo de execução. Arquiteturas de microcontroladores como Atmel AVR e Microchip PIC fazem uso da arquitetura Harvard (48).
Existem dois conceitos de instruções para processadores, a chamada de RISC (Re-
duced Instruction Set Computing, que possui um conjunto reduzido de instruções, e a CISC
(Complex Instruction Set Computing) um conjunto que possui instruções mais comple- xas, além de maior quantidade de instruções. Enquanto o CISC foca em adicionar ins- truções complexas, que demoram mais para serem executadas, porém realizando mais trabalho, o RISC foca em instruções mais simples, sendo executadas em menor tempo, porém necessitando de mais de uma instrução para fazer algumas operações que apenas uma CISC é capaz. Considere-se que um conjunto RISC tem uma complexidade menor
Capítulo 3. Hardware do Sistema 42
e consequentemente um consumo de energia inferior, mas é evidente que outros fatores influenciam no consumo de energia, como o processo de fabricação do circuito.
No geral, arquiteturas RISC tem algumas poucas instruções para acesso a memória e as demais instruções manipulam os dados já nos registradores, enquanto as instruções CISC podem fazer as operações com os dados ainda em memória, tendo, portanto, a execução de algumas instruções com ciclo consideravelmente maior do que outras, devido a latência elevada das memórias. Outra diferença é que quando se trabalha com periféricos (como um relógio RTC, sensores, etc) no RISC estes são mapeados em endereços de memória, acessados com instruções comuns para acesso a memória. No caso do CISC o processador, pode ter instruções especiais para tratar estes periféricos (48).
A escolha por um SoC ou um microcontrolador dependerá da aplicação, onde uma mais complexa que exija um sistema operacional completo deverá utilizar uma placa de desenvolvido com um SoC, caso do concentrador da rede de sensores sem fio. Já uma aplicação mais simples, que podem ou não necessitar de um sistema operacional exigindo menor capacidade de processamento, menor consumo de energia e baixo custo, deverá utilizar um microcontrolador, caso dos nós sensores.
3.1.1
Interface de comunicação GPIO e protocolos UART, SPI e I
2C.
Os dispositivos conectados ao SoC/Microcontrolador podem utilizar entradas e saídas, chamadas de GPIO ou, caso forem mais complexos, devem utilizar um protocolo de comunicação como UART, SPI ou I2C.
GPIO (General-Purpose Input/Output) são simplesmente entradas ou saídas com características elétricas pré-determinadas pelo fabricante do sistema. Considerando um sistema arbitrário, que opere com 3,3 V, entradas entre 0 e 1 V podem ser consideradas nível lógico baixo, entre 2,5 e 3,3 V nível lógico alto e maiores que 1 V e menores que 2,5 V indeterminado (esses limiares variam conforme o dispositivo e fabricante).
O protocolo UART (Universal Asynchronous Receiver/Transmitter ) é um proto- colo assíncrono que permite grande flexibilidade, com diferentes taxas de transmissão, tensões de operação, operar em modo simplex (em apenas uma direção), full duplex (nas duas direções ao mesmo tempo) e half duplex (nas duas direções, uma por vez).
3.1.1.1 SPI
O SPI é um protocolo de barramento síncrono, com comunicação full duplex, utili- zando uma arquitetura master-slave. Existe um dispositivo mestre (apenas ele pode iniciar a comunicação), sendo geralmente o microcontrolador, e um número pré-definido máximo de escravos. São utilizados no mínimo 4 conexões (49):
Capítulo 3. Hardware do Sistema 43
∙ SCK: Clock gerado pelo mestre;
∙ MOSI: Dados enviados pelo mestre para o escravo; ∙ MISO: Dados enviados pelo escravo para o mestre; ∙ SS: Seleciona o escravo.
Cada escravo deve estar conectado a uma saída do SS do mestre, logo a quantidade de conexões é 3 mais o número de escravos. As portas utilizam conexão Push-Pull, ou seja, existe um transistor entre a linha e o terra e outro ligando na alimentação. Desta maneira, quando se quer aterra a linha, apenas um dos transistores é ativado, da mesma maneira que para colocar a linha em estado lógico alto.
3.1.1.2 I2C
O protocolo I2C foi desenvolvido pela Philips, atual NXP. É um barramento half
duplex, que utiliza uma arquitetura master-slave. Ele pode ter um número arbitrário de
mestres e até 127 escravos (desde que os endereços dos periféricos não sejam coincidentes e as características do circuito permitam), utilizando apenas duas conexões físicas (50):
∙ SCL: Clock gerado pelo mestre; ∙ SDA: os dados a serem transmitidos.
Todos os dispositivos escutam a linha SCL e apenas quando são endereçados pas- sam a se comunicar com o mestre. Se existirem dois ou mais mestres em um mesmo barramento, procedimentos de arbitragem são empregados para evitar conflitos (50).
A conexão das portas utiliza um circuito chamado de Open-Drain, ou seja, existe um transistor entre o terra e a linha e um resistor de pull-up entre a linha e a alimentação. Assim, quando o transistor está desligado, a linha está em estado alto; quando o transistor é ativado a linha é colocada em estado lógico baixo. Repare que quando a linha está aterrada, o resistor de pull-up está conduzindo corrente, coisa que não ocorre em Push-
Pull, pois o transistor que liga a linha com a alimentação não estará conduzindo.