Resolvi me aventurar no chip nRF51822, segue abaixo o relato dos testes que estou fazendo.
Eu não tenho o kit de desenvolvimento da Nordic, mas “banquei” o desenvolvimento do Stick’n’Find e recebi dois buttons. Após abri-lo, notei que haviam alguns test-points grandes nos pinos 23 e 24 do chip (SWD), isso simplifica muito na hora de soldar os fios para o programador.
Infelizmente, até onde sei, este chip não funciona com os programadores open-source suportados pelo OpenOCD. Então o jeito será usar um J-Link.
Como não tenho um J-Link, resolvi comprar a versão estudante na Digikey.
A ligação do programador foi simples: TMS (pino 7) do JLink no pino 23 do nRF51822; TCK (pino 9) no pino 24; VTref (pino 1) no pino 12; GND (pino 20 ou qualquer pino par) no pino 13.
Instalei as ferramentas do J-Link (http://www.segger.com/jlink-software.html) no Ubuntu.
Ao executar o comando JLinkExe, o chip não foi reconhecido. A solução foi simplementes dar um rápido curto-circuito entre o VDD e GND para reiniciar o chip. Após isso o chip foi reconhecido:
J-Link>si 1 Selecting SWD as current target interface. Setting target interface speed to 1MHz. Use "Speed" to change. J-Link>selemu J-Link[0]: Connection: USB, Serial number: 268006167, ProductName: J-Link EDU Select emulator index: 0 Emulator with USB serial number 268006167 selected. DLL version V4.80, compiled Dec 20 2013 19:40:51 Firmware: J-Link ARM V8 compiled Nov 25 2013 19:20:08 Hardware: V8.00 S/N: 268006167 OEM: SEGGER-EDU Feature(s): FlashBP, GDB VTarget = 2.601V Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000 Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000 No devices found on JTAG chain. Trying to find device on SWD. Info: Found SWD-DP with ID 0x0BB11477 Info: Found Cortex-M0 r0p0, Little endian. Info: FPUnit: 4 code (BP) slots and 0 literal slots Cortex-M0 identified. Target interface speed: 100 kHz
O próximo passo foi apagar a flash:
J-Link>device nrf51822 J-Link>speed 1000 # erase the entire flash J-Link>w4 4001e504 2 J-Link>w4 4001e50c 1 J-Link>w4 4001e514 1
Após isso, basta executar o comando diretamente via terminal que o chip é identificado:
$ JLinkExe SEGGER J-Link Commander V4.80 ('?' for help) Compiled Dec 20 2013 19:40:54 DLL version V4.80, compiled Dec 20 2013 19:40:51 Firmware: J-Link ARM V8 compiled Nov 25 2013 19:20:08 Hardware: V8.00 S/N: 268006167 OEM: SEGGER-EDU Feature(s): FlashBP, GDB VTarget = 2.627V Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000 Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000 No devices found on JTAG chain. Trying to find device on SWD. Info: Found SWD-DP with ID 0x0BB11477 Info: Found Cortex-M0 r0p0, Little endian. Info: FPUnit: 4 code (BP) slots and 0 literal slots Cortex-M0 identified. Target interface speed: 100 kHz J-Link>
O próximo passo será a instalação do SDK da Nordic e a criação do meus primeiros programas, para quem não tem paciência de esperar, pode tentar instalar as ferramentas seguindo estas dicas:
http://www.funwithelectronics.com/?id=168
http://hg.cmason.com/nrf
Fonte: http://www.segger2.com/index.php?page=Thread&postID=4072
Update: SDK Nordic modificado para compilar com o GCC: https://github.com/finnurtorfa/nrf51
Dicas de desenvolvimento: http://robolabwiki.sdu.dk/mediawiki/index.php/Nordic_Semiconductor_nRF51822_development
BLE Stack Open Source: https://github.com/pauloborges/blessed/