terça-feira, 6 de agosto de 2013

Reprogramando o SensorTag da Texas Instruments

O objetivo desta postagem é relatar o processo para re-programar o SensorTag da Texas Instruments tratasse de um dispositivoBluetooth low energy (BLE também conhecido como Bluetooth 4.0 e Bluetooth smart) que possui vários sensores:


  • Sensor de temperatura por Infravermelho
  • Sensor de humidade
  • Sensor de pressão
  • Acelerometro
  • Giroscópio
  • Magnetometros
  • 2 botões para comandos



Texas CC2541 Sensor Tag

Na prática podem existir várias formas de programar o este e outros dispositivos da família CC2540 e CC2541 (chips BLE), meu objetivo é mostrar uma que funciona, se desejar contribuir fique à vontade para comentar.

Além do próprio SensorTag seguem algumas ferramentas básicas que utilizei:

Visualizando o funcionamento do SensorTag:

Este é um aplicativo muito útil para você ver o SensorTag funcionado e para entender as mudança que você venha a fazer no código.

Programador: 

CC2540 Development Kit
Acredito que também seria possível utilizar o programador CC2540 Mini Development Kit  (inclusive é mais barato), mas novamente meu objetivo e relatar como e eu fiz (e eu não tenho ele) e não a melhor maneira de fazer, portanto o usa-lo ao invés do CC2540 Development Kit é uma opção sua.

CC2540 Mini Development Kit


Código fonte:

Com os stack vem o código fonte que podemos alterar como exemplos, além dos arquivos .Hex mais atualizados para reprogramar o SensorTag ou o Dongle. Meu teste usou o Stack 1.3.2.

Flash Programmer:

Necessário para aplicar o arquivo .Hex no SensorTag. Meu teste usou a versão 1.12.7.

IDE:

Os chips CC2540 ou CC2541 possuem um processador 8051 interno, atualmente (agosto de 2013) é a forma oficial da Texas para programar. Ele é um software pago, para o efeito de aprendizado desta postagem é necessário escolher a licença com período de expiração de 30 dias (existe uma outra opção de licença com limitação do tamanho do código em 4K que não funciona para o SensorTag, pois seu código é maior que isso). Meu teste usou a versão 8.20.1 com 30 days Evaluation edition License.

Você pode pesquisar se outras IDEs já suportam o CC2540 / CC2541, dois candidatos para o futuro são:

SDCC - Small Device C Compiler
http://sdcc.sourceforge.net/

Texas Code Composer Studio (CCStudio)
http://www.ti.com/tool/ccstudio

Passo a passo

Reprograme o Dongle

O dongle que vem no CC2540 Mini Development Kit está com um firmware de sniffer que precisa ser substituído. Instale o Bluetooth low energy software stack and tools e o SmartRF Flash Programmer.

Conecte a Evaluation Board SmartRF05(qualquer uma das duas) do CC2540 Mini Development Kit conforme abaixo:


Não esqueça da chave liga-desliga na evaluation board.

Os dois conectores USB precisam estar conectados, especificamente o que fica conectado na evaluation board (esquerda da foto) será utilizado para passar informações, o cabo conectado ao dongle (direita da foto) serve somente para alimentar o dongle.



MUITA ATENÇÃO: Na posição do cabo de debug, veja o fio vermelho na posição 1 indicada no dongle.


Abra o Flash Programmer:

Provavelmente irá aparecer esta janela informando que o firmware dela é antigo e precisa ser atualizado:



Configure conforme a imagem abaixo, para atualizar o firmware da evaluation board:


Feche o programa e abra novamente.

Configure conforme a imagem abaixo:


Em FlashImage utilize o .hex abaixo (o meu dongle usa o chip CC2540):
C:\Texas Instruments\BLE-CC254x-1.3.2\Accessories\HexFiles\CC2540_USBdongle_HostTestRelease_All.hex

Clique em Perform Actions para transmitir o firmware para o dongle

Uma vez reprogramado o dongle já pode ser utilizado, quando for conectado pela primeira vez será necessário o driver que está no diretório:
C:\Texas Instruments\BLE-CC254x-1.3.2\Accessories\Drivers

Mais informações no documento 4505.Reprogramming_CC2540_USB_dongle.pdf

Teste o Dongle e o SensorTag

Antes de reprograr o seu SensorTag, veja ele funcionando. Instale o Bluetooth low energy (BLE) Device Monitor e teste os SensorTag.

Desconecte a evaluation board o dongle o cabo de debug, e conecte somente o dongle no seu computador.

Abra o BLE Device Monitor. (instruções mais detalhadas aqui.)

Pressione o botão lateral do SensorTag:

No BLE Device Monitor click em Scan, aguarde aparecer o SensorTag, selecione ele e clique em Connect.

Uma vez conectado, e Attributes(à direita) expanda o item 93, depois o 94,  no 96 em Value escreva: 01:00

Aperte os botões do SensorTag e note que o valor de 95 irá mudar para 01 e 02 (de acordo com o botão que você apertar), em EventLog (à esquerda).


Isto demonstrou que o seu Dongle está configurado adequadamente e o SensorTag está se comunicando corretamente.

Clique em Disconnect e feche o BLE Device Monitor.


Configurando a IDE


Instale o IAR Embedded Workbench for 8051 (lembre-se de escolher a licença com período de expiração de 30 dias).

Copie o diretório:
C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\SensorTag

Para 
C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag

Somente para preservar o código original.

Abra o IAR Embedded Workbench, clique em File->Open->Workspace...



Selecione o arquivo:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\SensorTag.eww

Se aparecer a janela de mensagem abaixo clique em Sim.



Em Workspace clique com o botão direito em SensorTag-CC2541DK-Sensor e em seguida em Rebuild All.


Provavelmente dará o erro: Error[e16]: Segment SLEEP_CODE (size: 0x9 align: 0) is too long for segment definition. At least 0x1 more bytes needed. The problem occurred while ...









Existem um workaround que vou utilizar, mais informações aqui.

Expanda HAL->Target->Drivers e abra o arquivo hal_sleep.c procure a função:

 void halSetSleepMode(void)

Substitua:

PCON = halSleepPconValue; 

por:

asm("MOV     0x87,halSleepPconValue");



Salve, e execute o Rebuild All novamente somente para verificar se está tudo corrigido. 

Deve ter sido gerado com sucesso um arquivo em:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\CC2541DK-Sensor\Exe\SensorTag.hex

Renomeie este arquivo para SensorTagOri.hex. (Vamos usar este arquivo para voltar o SensorTag para a configuração original depois de modificá-lo.

Re-programando o SensorTag


Vamos gerar alguma modificação no código somente para provar que o ciclo completo foi realizado.

Quando apertamos os botões do SensorTag é transmitido o número 01 ou 02 dependendo do botão acionado. Vamos modificar estes número para 03 e 04.

Expanda APP  e abra o arquivo SensorTag.c procure a função:

static void sensorTag_HandleKeys( uint8 shift, uint8 keys 

procure a linha:

SK_Keys |= SK_KEY_LEFT;

Modifique para:

SK_Keys |= 0x03;//SK_KEY_LEFT;

Agora procure a linha:

SK_Keys |= SK_KEY_RIGHT;

Modifique para:

SK_Keys |= 0x04;//SK_KEY_RIGHT;


Salve, e execute o Rebuild All


Conecte o SensorTag na Evaluation Board e ela no computador:


Atenção para a posição do pino 1 (fio vermelho do cabo de debug)





Abra o Flash Programmer:

Reprograme o SensorTag com o arquivo:

C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\MySensorTag\CC2541DB\CC2541DK-Sensor\Exe\SensorTag.hex

Que acabou se ser gerado.

feche o Flash Programmer, desconecte a evaluation board e o SensorTag do cabo de debug.

Conecte o Dongle no computador e abra o BLE Device Monitor, conecte o SensorTag e veja que os números 03 e 04 são enviados quando os botões do SensorTag são pressionados.


Pronto! 

Agora, reprograme o SensorTag usando o SensorTagOri.hex (aquele que foi gerado antes da modificação), caso tenha pulado esta etapa, volte o código ao original e gere um novo .hex.


Dicas adicionais:


Fatal Error[e89]

A primeira vez que tentei reprogramar o SensorTag utilizei o IAR com a licença que limita o código em 4k, apresentou: 

Fatal Error[e89]: Too much object code produced (more than 0x1000 bytes) for this package 

Substitui a licença pela outra que é por tempo (30 dias), e o erro continuou. Aparentemente o IAR deixou algum arquivo que informava o a licença antiga no diretório do projeto.

Para resolve-lo é necessário  (fechar e abrir o IAR), copiar o diretório com o código fonte original e começar novamente a partir deste diretório "limpo".

Target Selection

Sempre compile através do Rebuild All.

O botão com um triangulo verde tem a Donwload e Debug que não é aplicável no nosso caso (eu cai nessa):


Quando você clica nele aparece a mensagem abaixo solicitando o Target Selection, que também não é necessária.


Em resumo: use o Rebuild All.


SensorTag e Python
Acesse o Blog da Isabela:


Conectando dois SensorTags no mesmo Dongle
Acesse o blog do Arthur: