Descrição do Protocolo Utilizado
Índice:
Introdução.
Descrição dos Bytes Enviados e Recebidos.
- RX_PREAMBLE e TX_PREAMBLE
- RX_L_HEADER e RX_H_HEADER
- RX_L_HOMEADD e RX_H_ADD
- RX_CTRL
- RX_SOURCEADD
- RX_DESTADD
- RX_MESSAGE e RX_DATA
- RX_PARITY
- TX_PREAMBLE
- TX_L_HEADER e TX_H_HEADER
- PARITY
Outros registos (Bytes) utilizados no programa.
Foi necessário criar um protocolo de comunicação entre os Power Line Modem de forma a que não existisse quaisquer perca de dados e se conseguisse endereçar apenas um dos Power Line Modem, assim como existir a possibilidade de apenas um servidor actuar os power line modem.
Assim, caso se pretenda actuar simultaneamente dois
microcontroladores ( power line modems), bastam que
estes tenham os mesmos endereços. Da mesma maneira
caso se pretenda ter vários servidores a actuar simultaneamente
os microcontroladores também estes devem ter os mesmos
endereços.
Desta maneira, consegue-se distinguir o problema de
termos, por exemplo, duas habitações adjacentes com
este sistema, onde não deve existir qualquer interferência
entre as habitações.
Como aplicação final, decidiu-se criar um sistema em que existe um servidor que endereça um microcontrolador através da linha eléctrica, e que o manda :
De notar que muito facilmente se consegue criar qualquer
outra aplicação, visto o programa estar feito de maneira
a redireccionar facilmente quaisquer outras instruções.
Para isso existe uma depuração se o endereço enviado
corresponde ao próprio endereço do microcontrolador.
O endereço de cada máquina corresponde a um endereço
de 16 bits logo podendo existir virtualmente 2^16 =
65535 microcontroladores ligados a um só servidor.
Além disso existe mais um nibble que varia com o valor duma porta do microcontrolador
e que possibilita a alteração do endereço do microcontrolador
pela simples comutação de um switch por exemplo.
A nível de depuração de erros, existe uma verificação
de paridade, visto a linha eléctrica ser muito ruidosa
logo ser provável que existam erros de transmissão.
Embora em aplicações como esta, devido à elevada possibilidade
de ocorrerem erros de transmissão, fosse recomendável
criar um, qualquer outro tipo de verificação de erros,
(a verificação de paridade pode ser facilmente confundida
quando existem, por exemplo, dois erros simultâneos
na transmissão de um byte) optámos por não o implementar
no nosso protocolo, visto existirem muitos endereços
(2^20=1048576) disponíveis para a implementação de
mais power line modems, logo consegue-se uma verificação
de erros pois quando estes endereços não estão ocupados,
existe uma muito boa percentagem de o erro de transmissão
ser detectado.
Para explicação do protocolo propriamente dito, apresentamos a ordem dos bytes enviados e recebidos assim como a sua descrição.
Descrição dos bytes enviados e recebidos:
| Byte N.º | De | Para | Valor |
| 1 | Servidor | MicroControlador | RX_PREAMBLE |
| 2 | Servidor | MicroControlador | RX_L_HEADER |
| 3 | Servidor | MicroControlador | RX_H_HEADER |
| 4 | Servidor | MicroControlador | RX_L_HOMEADD |
| 5 | Servidor | MicroControlador | RX_H_ADD |
| 6 | Servidor | MicroControlador | RX_CTRL |
| 7 | Servidor | MicroControlador | RX_SOURCEADD |
| 8 | Servidor | MicroControlador | RX_DESTADD |
| 9 | Servidor | MicroControlador | RX_MESSAGE |
| 10 | Servidor | MicroControlador | RX_DATA |
| 11 | Servidor | MicroControlador | RX_PARITY |
| 12 | MicroControlador | Servidor | TX_PREAMBLE |
| 13 | MicroControlador | Servidor | TX_L_HEADER |
| 14 | MicroControlador | Servidor | TX_H_HEADER |
| 15 | MicroControlador | Servidor | PARITY |
Este byte é o primeiro byte recebido e enviado (Chamemos-lhe
um start byte).Fica disponível para futuras
implementações, caso seja preciso :
No programa utilizado, é simplesmente enviado e recebido
mas não existe qualquer tipo de depuração com outro
valor pré-definido. No entanto foi incluído no programa
de forma a, para uma futura implementação, não se tivesse
de alterar todo o código fonte.
Envia-se neste programa o Byte FFh para
que os outros modems que possivelmente iriam transmitir
passem a detectar a portadora na linha, logo esperam
que esta fique disponível.
Estes dois bytes (o low e o high) enviados pelo servidor,
representam a estação (microcontrolador) que se deseja
endereçar. No microcontrolador, esse endereço está
definido como duas Equates (LR_HEADER e HR_HEADER),
e pode mesmo ser alterado quando o programa está em
execução através da possibilidade de alteração de qualquer
byte da memória.
Se não for igual ao endereço do microcontrolador, este
sofre um pequeno reset a nível de software, em que
fica no modo de espera outra vez, até ser ele, o endereçado.
Estes dois bytes (o low e o high) enviados pelo servidor,
representam o endereço do servidor que está a endereçar.
No microcontrolador, esse endereço está definido como
duas Equates (L_HOMEADD e H_HOMEADD).
Se não for igual ao endereço do microcontrolador, este
também sofre um pequeno reset a nível de software,
em que fica no modo de espera outra vez, até reconhecer
o servidor.
Nestes bytes decidimos fazer um controle de paridade,
pois podem existir por exemplo dois servidores, cada
um com vários microcontroladores, estes com endereços
iguais.
Se o RX_CTRL.0 = 0 então verifica-se o que é que o
servidor quer que o microcontrolador faça.
Se RX_CTRL Diferente de 0 então existe um RESET completo
... ( redefinição de todos os registos e restauro de
todas as equates ...)
É verificada a Paridade (Nova implementação em estudo.)
Corresponde a mais um nibble no endereço do microcontrolador.
É comparada com a
ADDRESS
definida no inicio (através da P1 (Porta 1 do microcontrolador)
- Para implementação de um
Switch
por ex. ).
Caso
RX_DESTADD
seja diferente de
ADDRESS
a flag de erro
(ERROR.2)
passa ao nível lógico 1 (um).
Também neste byte é verificada a paridade.
Neste byte (RX_MESSAGE), está definido o que se quer
que o microcontrolador faça. Os seus bits representam
o seguinte :
Se for um dos Bits não redireccionados que esteja activado,
o Bit de Erro (ERROR.7) fica a 1.
Recebe o Byte de Paridade de forma a que se possa verificar se a transmissão foi correcta de forma a que, se necessária, exista uma retransmissão.
| Bit | Deve ser igual ao: | Contém a Paridade de : |
| RX_PARITY.0 | PARITY.0 (=0) | Não Implementado (=0) |
| RX_PARITY.1 | PARITY.1 | RX_DATA |
| RX_PARITY.2 | PARITY.2 | RX_MESSAGE |
| RX_PARITY.3 | PARITY.3 | RX_DESTADD |
| RX_PARITY.4 | PARITY.4 | RX_SOURCEADD |
| RX_PARITY.5 | PARITY.5 | RX_CTRL |
| RX_PARITY.6 | PARITY.6 | RX_H_HOMEADD |
| RX_PARITY.7 | PARITY.7 | RX_L_HOMEADD |
Se a Paridade for diferente daquela que o servidor emitiu então a flag de erro (ERROR.3) fica com o nível lógico 1 (um).
TX_PREAMBLE
-> Ver RX_PREAMBLE .
Estes dois bytes ( o low e o high ) enviados pelo microcontrolador,
representam o servidor que se deseja endereçar.
No microcontrolador, esse endereço está definido como
duas equates (TX_L_HEADER e TX_H_HEADER.
O servidor pode então reconhecer que é ele o endereçado
e receber então o resto do Acknoledge.
Nesta altura o microcontrolador manda o byte de Paridade
de forma a que o servidor reconheça que todos os bytes
foram correctamente recebidos.
Para ver a que cada bit do byte de paridade corresponde,
ver o byte
RX_PARITY
.
Outros Registos (Bytes) Utilizados no Programa.
Este byte contém o byte recebido pela interrupção serial (MOV SER_DAT,SBUF).
|
Back |
Up |
Forward |
|
|
Pages by Nuno Nunes. |
|