3.4 A Interface Com Cartão Micro-SD
3.4.1 O Protocolo de Comunicação do DOSonCHIP CD17B10
Como mencionado anteriormente o CD17B10 possui uma série de comandos para sua operação. Os comandos se dividem em comandos simples e complexos. Todos os comandos simples consistem de um único byte identificador seguido de quatro bytes de argumento do comando. A resposta a um comando básico consiste de um byte indicador de resposta, podendo indicar sucesso ou insucesso, seguido de um argumento de resposta de quatro bytes (Figura 65). As respostas bem sucedidas possuem o byte indicador DOS_RES_NOERROR seguido por um argumento de quatro bytes que é específico para o comando. As respostas sem êxito retornam um código de erro seguido por um valor de erro de quatro bytes, que podem ser úteis para depuração [38].
Figura 65: Ilustração do protocolo de comunicação de comando simples DOSonCHIP – microcontrolador.
Tabela 5: Comandos Simples do DOSonCHIP [38]
Comando Descrição do Comando Argumento do Comando Argumento de Resposta
DOS_DOS_CMD_GET_ID Retorna a versão do do CI
CD17B10 Ignorado Bytes 3‐1: ignorado Byte 0: versão do DOSonCHIP DOS_CMD_GET_VERSIO N
Retorna a versão do firmware
do CI CD17B10 Ignorado Byte 3: DOSonCHIP bootloader MSB Byte 2: DOSonCHIP bootloader LSB Byte 1: DOSonCHIP firmware MSB
Byte 0: DOSonCHIP firmware LSB
DOS_CMD_GET_TIME
Retorna a data/hora atual do IC DOSonCHIP. Só tem sentido quando a data/hora
foi definido e o RTC foi ativado (através do comando DOS_CMD_SET_TIME_ON
_OFF).
Ignorado Bytes 3‐0: Data/Hora Atuais.
DOS_CMD_SET_TIME
Define a data/hora atual do IC DOSonCHIP. Só tem sentido
quando a data/hora foi definido e o RTC foi ativado
(através do comando DOS_CMD_SET_TIME_ON _OFF). Bytes 3‐0: Data/Hora Atuais. Ignorado DOS_CMD_SET_TIME_O N_OFF Habilita o RTC do DOSonCHIP Bytes 3‐1: Ignorados Byte 0: DOS_ON ou DOS_OFF Ignorado DOS_CMD_MOUNT
Monta o Cartão, sendo seu argumento preferencial deve
ser 0xFFFFFFFF
Bytes 3‐0: Número de setores livres a serem encotrados para modo de
escrita
Bytes 3‐0: indentificador único do cartão.
DOS_CMD_GET_FREE_SE CTORS
Retorna o número de setores livres encontrados do cartão. Cada sertor tem 512 bytes
Ignorado Bytes 3‐0: número de setores livres.
DOS_CMD_DIR Inicializa ou incrementa o diretório
Bytes 3‐1: Ignorado
Byte 0: DOS_FIRST ou DOS_NEXT
Bytes 3‐1: Ignorado
Byte 0: atributo do arquivo atual.
DOS_CMD_DIR_GET_PRO PERTY
Pesquisa as propriedades do diretório ou arquivo atual
Bytes 3‐1: Ignorado Byte 0: DOS_PROPERTY_SIZE, DOS_PROPERTY_TIME _CREATED ou DOS_PROPERTY_TIME _MODIFIED Para DOS_PROPERTY_SIZE: tamanho em bytes do arquivo,
sendo 0 para diretório. Para DOS_PROPERTY_TIME_C
REATED e DOS_PROPERTY_TIME_M
ODIFIED: retorna a data de criação ou modificação do
diretório. DOS_CMD_MAKE_DIR
Cria um novo diretório como o nome especificado pelo
buffer name.
Ignorado Ignorado
DOS_CMD_SET_DIR Abre o diretório especificado
DOS_CMD_DELETE
Deleta o arquivo especificado por buffer name. A exclusão de diretórios não é suportada.
Ignorado Ignorado
DOS_CMD_SET_HANDLE Define um handle para o arquivo atual
Bytes 3‐1: valor do novo
handle(0‐3) Ignorado
DOS_CMD_OPEN_READ
Abre o arquivo especificado por buffer name no modo de
leitura.
Bytes 3‐0: 0 Bytes 3‐0: tamanho do arquivo em bytes.
DOS_CMD_OPEN_WRITE
Abre o arquivo especificado por buffer name no modo de
escrita.
Bytes 3‐0: 0 Bytes 3‐0: tamanho do arquivo em bytes.
DOS_CMD_SEEK
Incrementa o ponteiro de escrita e leitura o arquivo em
uma quantidade de bytes
Bytes 3‐0: número de bytes de increment. 0 para
inicio do arquivo
Ignorado
DOS_CMD_WRITE_PREA LLOCATE
Aloca espaço em bytes no arquivo aberto no modo de
escrita.
Bytes 3‐0: número de bytes para alocar.
Bytes 3‐0: novo tamanho do arquivo em bytes.
DOS_CMD_CLOSE Fecha o arquivo especificado
pelo handle atual Ignorado Ignorado
Os comando complexos do DOSonCHIP têm seu próprio protocolo de comunicação. Estes comandos são para escrita de dados, leitura de dados e leitura e escrita do buffer name, sendo descritos em seguida.
Comando DOS_CMD_SET_NAME: Define o valor do buffer name atual. Antes de enviar o nome, o microcontrolador deve informar ao DOSonCHIP o comprimento do nome que será enviado, sendo o máximo de 12 bytes para cada nome (Figura 66).
Comando DOS_CMD_GET_NAME: Recupera o valor do buffer name atual. Antes de receber o nome, o DOSonCHIP informa ao microcontrolador o comprimento do nome que será o enviado, sendo o máximo de 12 bytes para cada nome.
Figura 67: Protocolo de comunicação do comando DOS_CMD_GET_NAME DOSonCHIP.
Comando DOS_CMD_READ: Lê dados de um arquivo aberto para leitura (indicado pelo handle atual). O DOSonCHIP envia dados em pacotes com tamanho variável. Antes de enviar o primeiro bloco, o DOSonCHIP informa ao microcontrolador o tamanho do pacote que será o enviado. Sempre que o tamanho do pacote mudar, o DOSonCHIP vai informar ao microcontrolador o novo tamanho.
Para receber um bloco, o microcontrolador deve enviar o comando DOS_HANDSHAKE_PAK_NEXT. Em resposta, o DOSonCHIP envia o comando DOS_DATA_BLOCK seguido do bloco de dados. Ao final da transmissão de dados o DOSonCHIP envia uma resposta DOS_DATA_BLOCK_END. Se qualquer outra resposta é recebida indicará um erro durante a leitura.
Figura 68: Protocolo de comunicação do comando DOS_CMD_READ DOSonCHIP.
Comando DOS_CMD_WRITE: Grava dados em um arquivo aberto no modo de escrita (indicado pelo handle atual). O microcontrolador envia os dados ao DOSonCHIP em uma série de pacotes. Antes que qualquer dado seja escrito, o DOSonCHIP informa ao microcontrolador o tamanho do pacote de dados que é esperado. Se houver mudanças no tamanho do pacote de dados o DOSonCHIP informa o microcontrolador o novo tamanho do pacote.
Antes de enviar os dados para o DOSonCHIP, o microcontrolador consulta a sua disponibilidade através de uma série de comandos handshake. Se o microcontrolador recebe o comando DOS_HANDSHAKE_GO, ele envia um bloco de dados usando o tamanho do bloco anteriormente informado pelo DOSonCHIP. Se o microcontrolador recebe o comando DOS_CMD_SET_BLOCK_LEN, deve ler quatro bytes do argumento de resposta e ajustar o comprimento do bloco atual antes de enviá-lo (Figura 69).
Figura 69: Protocolo de comunicação do comando DOS_CMD_WRITE DOSonCHIP.
Todos os comandos, resposta e erros do DOSonCHIP estão detalhados no anexo 9 e as funções de comando implementadas neste trabalho estão descritas na linguagem de programação C no anexo 10.