Como gravar as páginas de configuração de uma tag sem estragá-la?
Leia antes o mapa de memória do chip, grave cada página inteira depois de lê-la, ponha a senha antes do ajuste que liga a proteção, e deixe cada bit sem volta por último. Depois execute a sequência inteira numa tag que você possa perder, já que nenhuma API de plataforma confere o que o código grava ali.
O mapa pertence ao chip
As páginas de configuração guardam os ajustes que a página da configuração lista: senha, condições de acesso, contadores, espelhamento e bits de bloqueio. Nenhum tipo do NFC Forum os define, então as posições deles mudam de um chip para o seguinte. Uma NTAG213 guarda os bytes de bloqueio dinâmicos dela na página 40 e a configuração dela nas páginas 41 a 44, segundo a ficha dela no wakdev.com; uma NTAG215 usa as páginas 130 a 134, segundo a dela.
Um número de página vale portanto para uma referência só. O código identifica o chip antes de gravar, como descreve do lado de quem compra a página da identificação do chip, e recusa executar a sequência dele em qualquer outra coisa: a página 41 de uma NTAG213 é memória de usuário comum numa NTAG215.
Uma página se grava inteira
WRITE põe quatro bytes de uma vez, e a referência do MifareUltralight documenta writePage() como gravando uma página. Os bytes de configuração dividem páginas, então mudar um deles quer dizer ler a página, mudar esse byte, e gravar os quatro de volta.
Grave de volta o que você leu nos bytes que não pretende mudar. Um byte gravado como zero porque o código não sabia o significado dele é um ajuste mudado sem ninguém ter decidido, e alguns ajustes não voltam.
Nem toda página relê o que foi gravado. A página que guarda a senha normalmente não é legível, como observa a página da senha, então o código guarda o valor que gravou em vez de esperar relê-lo.
Uma ordem que mantém você dentro
Grave a senha antes do ajuste que liga a proteção. A página da senha descreve os dois passos, a chave e o alcance dela; na outra ordem, a proteção começa com a senha que o chip guardava antes, e as gravações posteriores dentro da faixa protegida precisam dessa.
Deixe os ajustes sem volta para o fim. Os bits de bloqueio, um contador que não dá para desabilitar depois de habilitado, e um bit que congela a própria configuração são permanentes nos chips que os têm, como avisa a página da configuração, e cada um posto cedo transforma um erro mais adiante na sequência numa tag perdida.
Releia cada página depois de gravá-la, salvo as que não são legíveis, e pare na primeira diferença. Uma sequência que continua depois de uma gravação fracassada constrói sobre um estado que ninguém conhece.
Uma tag para perder primeiro
Execute a sequência completa numa tag antes do lote, depois confira a partir de um segundo aparelho que não guarda a senha: uma gravação que dá certo ali quer dizer que o alcance está errado, o teste que a página da senha recomenda. Na mesma tag, experimente também uma senha errada onde o chip limita as tentativas fracassadas, já que o limite entra em produção com tudo o mais.
Guarde essa tag, etiquetada com a sequência e a data. Ela é a referência quando um lote se comporta de outro jeito, o mesmo raciocínio da tag morta que a página da tag corrompida sugere guardar para testar um passo de verificação.
Depois grave o lote com o mesmo código, não com uma variante dele. A página da gravação em série cobre o lado da produção.
Perguntas frequentes
A API NDEF consegue gravar páginas de configuração?
Não. A configuração fica fora do NDEF, então ela exige comandos WRITE brutos nas páginas que a ficha técnica do chip nomeia.
Por que a minha gravação de configuração caiu no conteúdo?
O número de página pertencia a outro chip. A página 41 guarda configuração numa NTAG213 e memória de usuário numa NTAG215.
Uma configuração errada dá para desfazer?
Uma senha dá para mudar com a atual. Os bits de bloqueio e uma configuração congelada não, em chip algum que os tenha.
A senha deve ser gravada antes ou depois do ajuste de proteção?
Antes. Senão a proteção começa com a senha que o chip já guardava, e as gravações posteriores na faixa protegida precisam dessa.