JTAG - JTAG

JTAG (em homenagem ao Joint Test Action Group que o codificou) é um padrão da indústria para verificar projetos e testar placas de circuito impresso após a fabricação.

A JTAG implementa padrões para instrumentação on-chip em automação de projeto eletrônico (EDA) como uma ferramenta complementar à simulação digital . Ele especifica o uso de uma porta de depuração dedicada que implementa uma interface de comunicação serial para acesso de baixo overhead sem a necessidade de acesso externo direto ao endereço do sistema e aos barramentos de dados. A interface se conecta a uma Porta de Acesso de Teste (TAP) on-chip que implementa um protocolo stateful para acessar um conjunto de registradores de teste que apresentam níveis lógicos do chip e recursos do dispositivo de várias partes.

O Joint Test Action Group foi formado em 1985 para desenvolver um método de verificação de projetos e teste de placas de circuito impresso após a fabricação. Em 1990, o Institute of Electrical and Electronics Engineers codificou os resultados do esforço no padrão IEEE 1149.1-1990, intitulado Standard Test Access Port and Boundary-Scan Architecture .

Os padrões JTAG foram estendidos por muitos fabricantes de chips semicondutores com variantes especializadas para fornecer recursos específicos do fornecedor.

História

Na década de 1980, placas de circuito multicamadas e circuitos integrados (ICs) usando matriz de grade de esferas e tecnologias de montagem semelhantes estavam se tornando padrão, e as conexões estavam sendo feitas entre ICs que não estavam disponíveis para sondas. A maioria das falhas de fabricação e de campo nas placas de circuito deveu-se a juntas de solda ruins nas placas, imperfeições entre as conexões das placas ou as ligações e fios de ligação dos blocos de IC aos quadros de chumbo dos pinos. O Joint Test Action Group (JTAG) foi formado em 1985 para fornecer uma visão de pinagem de um bloco IC para outro para que essas falhas pudessem ser descobertas.

O padrão da indústria tornou-se um padrão IEEE em 1990 como IEEE Std. 1149,1-1990 após muitos anos de uso inicial. No mesmo ano, a Intel lançou seu primeiro processador com JTAG (o 80486 ), o que levou a uma adoção mais rápida da indústria por todos os fabricantes. Em 1994, um suplemento que contém uma descrição da linguagem de descrição de varredura de limite (BSDL) foi adicionado. Refinamentos adicionais com relação ao uso de todos os zeros para EXTEST, separando o uso de SAMPLE de PRELOAD e melhor implementação para células OBSERVE_ONLY foram feitos e lançados em 2001. Desde 1990, esse padrão foi adotado por empresas eletrônicas em todo o mundo. A varredura de limite agora é quase sempre sinônimo de JTAG, mas JTAG tem usos essenciais além de tais aplicações de manufatura.

Depurando

Embora os primeiros aplicativos da JTAG fossem direcionados aos testes de nível de placa, aqui o padrão JTAG foi projetado para auxiliar no teste, diagnóstico e isolamento de falhas de dispositivos, placas e sistemas . Hoje, o JTAG é usado como o principal meio de acessar sub-blocos de circuitos integrados , tornando-o um mecanismo essencial para depurar sistemas embarcados que podem não ter nenhum outro canal de comunicação capaz de depurar. Na maioria dos sistemas, a depuração baseada em JTAG está disponível desde a primeira instrução após a reinicialização da CPU, permitindo que ela auxilie no desenvolvimento do software de inicialização inicial que é executado antes que qualquer coisa seja configurada. Um emulador no circuito (ou, mais corretamente, um "adaptador JTAG") usa JTAG como o mecanismo de transporte para acessar os módulos de depuração no chip dentro da CPU de destino . Esses módulos permitem que os desenvolvedores de software depurem o software de um sistema embarcado diretamente no nível de instrução da máquina quando necessário, ou (mais tipicamente) em termos de código-fonte de linguagem de alto nível.

O suporte para depuração de software de sistema é, para muitos desenvolvedores de software, o principal motivo de interesse no JTAG. Muitas arquiteturas de silício, como PowerPC, MIPS, ARM, x86, criaram uma infraestrutura completa de depuração de software, rastreamento de instrução e rastreamento de dados em torno do protocolo JTAG básico. Freqüentemente, fornecedores de silício individuais, entretanto, implementam apenas partes dessas extensões. Alguns exemplos são ARM CoreSight e Nexus , bem como implementações BTS (Branch Trace Storage) da Intel, LBR (Last Branch Record) e IPT (Intel Processor Trace). Existem muitas outras extensões específicas de fornecedores de silício que podem não estar documentadas, exceto sob o NDA . A adoção do padrão JTAG ajudou a afastar os ambientes de depuração centrados em JTAG dos primeiros designs específicos de processador. Os processadores podem ser normalmente interrompidos, de uma única etapa ou executados livremente. Pode-se definir pontos de interrupção de código, tanto para código em RAM (geralmente usando uma instrução especial de máquina) quanto em ROM / flash. Os pontos de interrupção de dados geralmente estão disponíveis, assim como o download de dados em massa para a RAM. A maioria dos projetos tem "depuração em modo de interrupção", mas alguns permitem que os depuradores acessem registradores e barramentos de dados sem a necessidade de interromper o núcleo que está sendo depurado. Alguns conjuntos de ferramentas podem usar módulos ARM Embedded Trace Macrocell (ETM) ou implementações equivalentes em outras arquiteturas para acionar a atividade do depurador (ou rastreamento) em eventos de hardware complexos, como um analisador lógico programado para ignorar os primeiros sete acessos a um registro de uma sub-rotina específica .

Às vezes, os desenvolvedores de FPGA também usam JTAG para desenvolver ferramentas de depuração. As mesmas técnicas JTAG usadas para depurar software em execução dentro de uma CPU podem ajudar a depurar outros blocos de design digital dentro de um FPGA. Por exemplo, instruções JTAG personalizadas podem ser fornecidas para permitir a leitura de registros construídos a partir de conjuntos arbitrários de sinais dentro do FPGA, fornecendo visibilidade para comportamentos que são invisíveis para operações de varredura de limite. Da mesma forma, escrever tais registros pode fornecer controlabilidade que de outra forma não está disponível.

Armazenando firmware

O JTAG permite que o hardware do programador do dispositivo transfira dados para a memória interna não volátil do dispositivo (por exemplo, CPLDs ). Alguns programadores de dispositivo têm um duplo propósito de programação e também de depuração do dispositivo. No caso de FPGAs, dispositivos de memória volátil também podem ser programados através da porta JTAG, normalmente durante o trabalho de desenvolvimento. Além disso, os recursos de monitoramento interno (temperatura, tensão e corrente) podem ser acessíveis através da porta JTAG.

Os programadores JTAG também são usados ​​para gravar software e dados na memória flash . Isso geralmente é feito usando o mesmo acesso de barramento de dados que a CPU usaria e, às vezes, é feito pela CPU. Em outros casos, os próprios chips de memória possuem interfaces JTAG. Algumas arquiteturas de depuração modernas fornecem acesso mestre de barramento interno e externo sem a necessidade de parar e assumir o controle de uma CPU. No pior caso, geralmente é possível conduzir sinais de barramento externo usando o recurso de varredura de limite.

Por uma questão prática, ao desenvolver um sistema embarcado, emular o armazenamento de instruções é a maneira mais rápida de implementar o "ciclo de depuração" (editar, compilar, baixar, testar e depurar). Isso ocorre porque o emulador no circuito que simula um armazenamento de instruções pode ser atualizado muito rapidamente a partir do host de desenvolvimento via, digamos, USB. O uso de uma porta serial UART e bootloader para fazer upload de firmware para o Flash torna esse ciclo de depuração muito lento e possivelmente caro em termos de ferramentas; instalar firmware em Flash (ou SRAM em vez de Flash) via JTAG é uma solução intermediária entre esses extremos.

Teste de varredura de limite

A tecnologia de varredura de limite JTAG fornece acesso a muitos sinais lógicos de um circuito integrado complexo, incluindo os pinos do dispositivo. Os sinais são representados no registro de varredura de limite (BSR) acessível via TAP. Isso permite testar e controlar os estados dos sinais para teste e depuração. Portanto, as falhas de software e hardware (fabricação) podem ser localizadas e um dispositivo operacional pode ser monitorado.

Quando combinado com o autoteste integrado ( BIST ), a cadeia de varredura JTAG permite uma solução embutida de baixa sobrecarga para testar um IC para certas falhas estáticas (curtos, aberturas e erros lógicos). O mecanismo de cadeia de varredura geralmente não ajuda a diagnosticar ou testar a temporização, temperatura ou outros erros operacionais dinâmicos que possam ocorrer. Os casos de teste são frequentemente fornecidos em formatos padronizados, como SVF , ou seu irmão binário XSVF, e usados ​​em testes de produção. A capacidade de realizar esses testes em placas acabadas é uma parte essencial do Design For Test nos produtos atuais, aumentando o número de falhas que podem ser encontradas antes que os produtos sejam enviados aos clientes.

Características elétricas

Uma interface JTAG é uma interface especial adicionada a um chip. Dependendo da versão do JTAG, dois, quatro ou cinco pinos são adicionados. As interfaces de quatro e cinco pinos são projetadas para que vários chips em uma placa possam ter suas linhas JTAG encadeadas em série se condições específicas forem atendidas. A interface de dois pinos é projetada para que vários chips possam ser conectados em uma topologia em estrela . Em ambos os casos, uma ponta de prova precisa apenas ser conectada a uma única "porta JTAG" para ter acesso a todos os chips em uma placa de circuito .

JTAG em cadeia (IEEE 1149.1)

Exemplo de cadeia JTAG.  O sinal de reinicialização do teste não é mostrado

Os pinos do conector são:

  1. TDI (dados de teste em)
  2. TDO (saída de dados de teste)
  3. TCK (relógio de teste)
  4. TMS (seleção do modo de teste)
  5. TRST (Test Reset) opcional.

O pino TRST é um reset opcional ativo-baixo para a lógica de teste, geralmente assíncrono, mas às vezes síncrono, dependendo do chip. Se o pino não estiver disponível, a lógica de teste pode ser redefinida comutando para o estado de redefinição de forma síncrona, usando TCK e TMS. Observe que redefinir a lógica de teste não implica necessariamente redefinir nada mais. Geralmente, existem algumas operações JTAG específicas do processador que podem redefinir todo ou parte do chip que está sendo depurado.

Como apenas uma linha de dados está disponível, o protocolo é de série . A entrada do relógio está no pino TCK. Um bit de dados é transferido do TDI e para o TDO por transição de clock crescente do TCK. Instruções diferentes podem ser carregadas. As instruções para ICs típicos podem ler o ID do chip, pinos de entrada de amostra, pinos de saída de acionamento (ou flutuação), manipular funções de chip ou desviar (canalizar TDI para TDO para encurtar logicamente as cadeias de vários chips).

Como acontece com qualquer sinal de clock, os dados apresentados ao TDI devem ser válidos para algum tempo de configuração específico do chip antes e Hold time após a transição de clock relevante (aqui, crescente). Os dados TDO são válidos por algum tempo específico do chip após a borda descendente do TCK.

A frequência máxima de operação do TCK varia dependendo de todos os chips na cadeia (a velocidade mais baixa deve ser usada), mas é normalmente 10-100 MHz (100-10 ns por bit). Além disso, as frequências TCK dependem do layout da placa e das capacidades e do estado do adaptador JTAG. Um chip pode ter um clock JTAG de 40 MHz, mas apenas se estiver usando um clock de 200 MHz para operações não JTAG; e pode ser necessário usar um relógio muito mais lento quando estiver no modo de baixo consumo de energia. Consequentemente, alguns adaptadores JTAG têm clocking adaptativo usando um sinal RTCK (Return TCK). Freqüências TCK mais rápidas são mais úteis quando JTAG é usado para transferir muitos dados, como ao armazenar um executável de programa na memória flash .

As mudanças de clock nas etapas do TMS por meio de uma máquina de estado JTAG padronizada . A máquina de estado JTAG pode reinicializar, acessar um registro de instrução ou acessar dados selecionados pelo registro de instrução.

As plataformas JTAG geralmente adicionam sinais aos poucos definidos pela especificação IEEE 1149.1. Um sinal de reinicialização do sistema (SRST) é bastante comum, permitindo que os depuradores reiniciem todo o sistema, não apenas as partes com suporte JTAG. Às vezes, há sinais de evento usados ​​para disparar a atividade pelo host ou pelo dispositivo que está sendo monitorado por meio do JTAG; ou, talvez, linhas de controle adicionais.

Embora poucos produtos de consumo forneçam um conector de porta JTAG explícito, as conexões geralmente estão disponíveis na placa de circuito impresso como um resquício da prototipagem de desenvolvimento e / ou produção. Quando exploradas, essas conexões geralmente fornecem os meios mais viáveis ​​para a engenharia reversa .

Contagem de pinos reduzida JTAG (IEEE 1149.7)

Exemplo de JTAG com contagem de pinos reduzida

Contagem de pinos reduzida JTAG usa apenas dois fios, um fio de relógio e um fio de dados. Isso é definido como parte do padrão IEEE 1149.7. Os pinos do conector são:

  1. TMSC (dados de série de teste)
  2. TCKC (relógio de teste)

É denominado cJTAG para JTAG compacto.

A interface de dois fios reduziu a pressão no número de pinos e os dispositivos podem ser conectados em uma topologia em estrela . A topologia em estrela permite que algumas partes do sistema sejam desligadas, enquanto outras ainda podem ser acessadas via JTAG; uma ligação em cadeia requer que todas as interfaces JTAG sejam alimentadas. Existem outras interfaces de dois fios, como Serial Wire Debug .

Modelo de comunicação

No JTAG, os dispositivos expõem uma ou mais portas de acesso de teste (TAPs). A imagem acima mostra três TAPs, que podem ser chips individuais ou podem ser módulos dentro de um chip. Uma cadeia de TAPs é chamada de cadeia de varredura ou (vagamente) um alvo. As cadeias de varredura podem ser arbitrariamente longas, mas, na prática, vinte TAPs são excepcionalmente longos.

Para usar JTAG, um host é conectado aos sinais JTAG do alvo (TMS, TCK, TDI, TDO, etc.) por meio de algum tipo de adaptador JTAG , que pode precisar lidar com problemas como mudança de nível e isolamento galvânico . O adaptador se conecta ao host usando alguma interface, como USB, PCI, Ethernet e assim por diante.

Primitivos

O host se comunica com os TAPs manipulando o TMS e o TDI em conjunto com o TCK e lendo os resultados por meio do TDO (que é a única entrada padrão do lado do host). As transições de saída TMS / TDI / TCK criam a primitiva de comunicação JTAG básica na qual os protocolos de camada superior são construídos:

  • Comutação de estado ... Todos os TAPs estão no mesmo estado, e esse estado muda nas transições TCK. Esta máquina de estado JTAG faz parte da especificação JTAG e inclui dezesseis estados. Existem seis "estados estáveis" em que manter o TMS estável evita que o estado mude. Em todos os outros estados, o TCK sempre muda esse estado. Além disso, a afirmação de TRST força a entrada em um desses estados estáveis ​​(Test_Logic_Reset), de uma forma um pouco mais rápida do que a alternativa de manter o TMS alto e alternar o TCK cinco vezes.
  • Mudando ... A maioria das partes da máquina de estado JTAG suporta dois estados estáveis ​​usados ​​para transferir dados. Cada TAP possui um registrador de instrução (IR) e um registrador de dados (DR). O tamanho desses registros varia entre os TAPs e esses registros são combinados por meio do TDI e do TDO para formar um grande registro de deslocamento. (O tamanho do DR é uma função do valor no IR atual daquele TAP e, possivelmente, do valor especificado por uma instrução SCAN_N.) Existem três operações definidas nesse registrador de deslocamento:
    • Capturando um valor temporário
      • A entrada para o estado estável Shift_IR passa pelo estado Capture_IR, carregando o registrador de deslocamento com um valor parcialmente fixo (não a instrução atual)
      • A entrada no estado estável Shift_DR passa pelo estado Capture_DR, carregando o valor do Registrador de Dados especificado pelo IR atual do TAP.
    • Mudar esse valor bit a bit, no estado estável Shift_IR ou Shift_DR; As transições TCK deslocam o registrador de deslocamento um bit, de TDI para TDO, exatamente como uma transferência de dados no modo SPI 1 através de uma cadeia de dispositivos (com TMS = 0 atuando como o sinal de seleção de chip, TDI como MOSI, etc.).
    • Atualizar IR ou DR a partir do valor temporário deslocado, na transição por meio do estado Update_IR ou Update_DR. Observe que não é possível ler (capturar) um registro sem gravá-lo (atualizá-lo) e vice-versa. Um idioma comum adiciona bits de sinalização para dizer se a atualização deve ter efeitos colaterais ou se o hardware está pronto para executar esses efeitos colaterais.
  • Executando ... Um estado estável é denominado Run_Test / Idle. A distinção é específica do TAP. A cronometragem do TCK no estado Idle não tem efeitos colaterais específicos, mas a cronometragem do TCK no estado Run_Test pode alterar o estado do sistema. Por exemplo, alguns núcleos ARM9 suportam um modo de depuração em que os ciclos de TCK no estado Run_Test conduzem o pipeline de instrução.

Portanto, em um nível básico, usar JTAG envolve ler e escrever instruções e seus registros de dados associados; e às vezes envolve a execução de vários ciclos de teste. Atrás desses registradores está o hardware que não é especificado pelo JTAG e que tem seus próprios estados que são afetados pelas atividades do JTAG.

A maioria dos hosts JTAG usa o caminho mais curto entre dois estados, talvez restrito por peculiaridades do adaptador. (Por exemplo, um adaptador trata apenas de caminhos cujos comprimentos são múltiplos de sete bits.) Algumas camadas construídas sobre JTAG monitoram as transições de estado e usam caminhos incomuns para acionar operações de nível superior. Alguns núcleos ARM usam essas sequências para entrar e sair de um modo SWD de dois fios (não JTAG) . Uma sequência Zero Bit Scan (ZBS) é usada no IEEE 1149.7 para acessar funcionalidades avançadas, como alternar TAPs para dentro e fora das cadeias de varredura, gerenciamento de energia e um modo diferente de dois fios.

Instruções JTAG IEEE Std 1149.1 (varredura de limite)

Os tamanhos dos registros de instrução tendem a ser pequenos, talvez quatro ou sete bits de largura. Exceto para BYPASS e EXTEST, todos os opcodes de instrução são definidos pelo implementador TAP, assim como seus registradores de dados associados; códigos de instrução indefinidos não devem ser usados. Duas instruções principais são:

  • A instrução BYPASS, um opcode de todos independentemente do tamanho do registro de instrução do TAP, deve ser suportada por todos os TAPs. A instrução seleciona um registro de dados de bit único (também chamado de BYPASS). A instrução permite que este dispositivo seja ignorado (não faça nada) enquanto outros dispositivos no caminho de varredura são exercitados.
  • A instrução IDCODE opcional, com um opcode definido pelo implementador. IDCODE está associado a um registro de 32 bits (IDCODE). Seus dados usam um formato padronizado que inclui um código do fabricante (derivado do código de identificação do fabricante padrão JEDEC , JEP-106), um número de peça atribuído pelo fabricante e um código de versão da peça. IDCODE é amplamente, mas não universalmente, suportado.

Ao sair do estado RESET, o registro de instrução é pré-carregado com BYPASS ou IDCODE. Isso permite que os hosts JTAG identifiquem o tamanho e, pelo menos parcialmente, o conteúdo da cadeia de varredura à qual estão conectados. (Eles podem entrar no estado RESET e, em seguida, varrer o Registrador de Dados até que eles leiam de volta os dados que escreveram. Um registro BYPASS tem apenas um bit zero; enquanto um registro IDCODE tem 32 bits e começa com um. Portanto, os bits não são escritos por o host pode ser facilmente mapeado para TAPs.) Essa identificação é freqüentemente usada para verificar a integridade da configuração manual, uma vez que o IDCODE geralmente é inespecífico. Ele poderia, por exemplo, identificar um microcontrolador baseado em ARM Cortex-M3, sem especificar o fornecedor ou modelo do microcontrolador; ou um FPGA específico, mas não como foi programado.

Um idioma comum envolve a mudança de BYPASS para os registradores de instrução de todos os TAPs, exceto um, que recebe alguma outra instrução. Dessa forma, todos os TAPs, exceto um, expõem um único registro de dados de bit, e os valores podem ser deslocados seletivamente para dentro ou para fora desse registro de dados do TAP sem afetar qualquer outro TAP.

O padrão IEEE 1149.1 (JTAG) descreve uma série de instruções para oferecer suporte a aplicativos de varredura de limite. Algumas dessas instruções são "obrigatórias", mas os TAPs usados ​​para depuração em vez de teste de varredura de limite às vezes fornecem suporte mínimo ou nenhum suporte para essas instruções. Essas instruções "obrigatórias" operam no Boundary Scan Register (BSR) definido no arquivo BSDL e incluem:

  • EXTEST para testes externos, como o uso de pinos para sondar comportamentos no nível da placa
  • PRELOAD carregando valores de saída do pino antes de EXTEST (às vezes combinado com SAMPLE)
  • SAMPLE lendo valores de pinos no registro de varredura de limite

As instruções "opcionais" definidas pelo IEEE incluem:

  • CLAMP uma variante de BYPASS que direciona os pinos de saída usando os valores PRELOADed
  • HIGHZ desativa as saídas de todos os pinos
  • INTEST para testes internos, como o uso de pinos para sondar comportamentos no chip
  • RUNBIST coloca o chip em modo de autoteste
  • USERCODE retorna um código definido pelo usuário, por exemplo, para identificar qual imagem FPGA está ativa

Os dispositivos podem definir mais instruções, e essas definições devem fazer parte de um arquivo BSDL fornecido pelo fabricante. Freqüentemente, eles são marcados apenas como PRIVADOS.

Registro de varredura de limite

Os dispositivos se comunicam com o mundo por meio de um conjunto de pinos de entrada e saída. Por si só, esses pinos fornecem visibilidade limitada do funcionamento do dispositivo. No entanto, os dispositivos que suportam a varredura de limite contêm uma célula de registro de deslocamento para cada pino de sinal do dispositivo. Esses registros são conectados em um caminho dedicado ao redor do limite do dispositivo (daí o nome). O caminho cria uma capacidade de acesso virtual que contorna as entradas e saídas normais, fornecendo controle direto do dispositivo e visibilidade detalhada dos sinais.

O conteúdo do registrador de varredura de limite, incluindo recursos de E / S de sinal, é geralmente descrito pelo fabricante usando um arquivo BSDL específico da peça . Eles são usados ​​com 'netlists' de design de sistemas CAD / EDA para desenvolver testes usados ​​na fabricação de placas. Os sistemas de teste comerciais geralmente custam vários milhares de dólares para um sistema completo e incluem opções de diagnóstico para localizar falhas como circuitos abertos e curtos. Eles também podem oferecer visualizadores esquemáticos ou de layout para descrever a falha de forma gráfica.

Para permitir a varredura de limite, os fornecedores de IC adicionam lógica a cada um de seus dispositivos, incluindo células de varredura para cada um dos pinos de sinal. Essas células são então conectadas para formar o registrador de deslocamento de varredura de limite (BSR), que é conectado a um controlador TAP. Esses designs são partes da maioria das bibliotecas Verilog ou VHDL. A sobrecarga para essa lógica adicional é mínima e geralmente vale o preço para permitir testes eficientes no nível da placa.

Exemplo: ARM11 debug TAP

Um exemplo ajuda a mostrar o funcionamento do JTAG em sistemas reais. O exemplo aqui é o TAP de depuração de um processador ARM11 , o núcleo ARM1136. O próprio processador possui extensa capacidade JTAG, semelhante ao que é encontrado em outros núcleos de CPU, e é integrado em chips com capacidades ainda mais extensas acessadas através do JTAG.

Este é um exemplo não trivial, que é representativo de uma seção transversal significativa de sistemas habilitados para JTAG. Além disso, mostra como os mecanismos de controle são construídos usando primitivas de leitura / gravação de registradores da JTAG e como elas se combinam para facilitar o teste e a depuração de elementos lógicos complexos; CPUs são comuns, mas FPGAs e ASICs incluem outros elementos complexos que precisam ser depurados.

Os licenciados deste núcleo integram-no em chips, geralmente combinando-o com outros TAPs, bem como vários periféricos e memória. Um desses outros TAPs lida com o teste de varredura de limite para todo o chip; não é suportado pelo TAP de depuração. Exemplos de tais chips incluem:

  • O OMAP2420 , que inclui um TAP de varredura de limite, o TAP de depuração ARM1136, um TAP de buffer de rastreamento ETB11, um DSP C55x e um TAP para um mecanismo de imagem baseado em TDMI ARM7 , com o TAP de varredura de limite ("ICEpick-B") tendo a capacidade de unir TAPs dentro e fora da cadeia de varredura JTAG.
  • O i.MX31 processador, que é semelhante, embora o seu "Sistema JTAG" TAP limite digitalização, o que é muito diferente do picador de gelo, e inclui um TAP para o seu motor de DMA em vez de um DSP e motor de imagem.

Esses processadores são destinados ao uso em aparelhos sem fio, como telefones celulares, o que é parte da razão pela qual eles incluem controladores TAP que modificam a cadeia de varredura JTAG: A operação de depuração de baixa potência requer o acesso a chips quando eles estão totalmente desligados e, portanto, quando não todos os TAPs estão operacionais. Essa modificação da cadeia de varredura é um assunto de um futuro padrão IEEE 1149.7.

Instalações JTAG

Esta depuração TAP expõe várias instruções padrão, e alguns projetados especificamente para assistida por hardware depuração , onde uma ferramenta de software (o "debugger") usa JTAG para se comunicar com um sistema que está sendo depurado:

  • BYPASSe IDCODE, instruções padrão conforme descrito acima
  • EXTEST, INTEST, Instruções padrão, mas operando no núcleo, em vez de uma cadeia de pesquisa de limites externo. EXTESTé nominalmente para gravar dados no núcleo, INTESTé nominalmente para lê-los; mas duas cadeias de varredura são exceções a essa regra.
  • SCAN_NInstrução ARM para selecionar a cadeia de varredura numerada usada com EXTESTou INTEST. Existem seis cadeias de varredura:
    • 0 - Registro de ID de dispositivo, 40 bits de dados de identificação somente leitura
    • 1 - Status de depuração e registro de controle (DSCR), 32 bits usados ​​para operar os recursos de depuração
    • 4 - Instruction Transfer Register (ITR), 33 bits (32 instrução mais um bit de status) usado para executar instruções do processador enquanto em um "modo de depuração" especial (veja abaixo)
    • 5- Debug Communications Channel (DCC), 34 bits (uma palavra de dados longa mais dois bits de status) usados ​​para transferência de dados bidirecional para o núcleo. Isso é usado no modo de depuração e, possivelmente, em tempo de execução ao falar com software que reconhece o depurador.
    • 6- Módulo de rastreamento incorporado (ETM) de 40 bits (endereço de 7 bits, uma palavra de dados longa de 32 bits e um bit R / W) usado para controlar a operação de uma instrução passiva e mecanismo de rastreamento de dados. Isso alimenta um Embedded Trace Buffer (ETB) no chip ou um pod externo de coleta de dados de rastreamento de alta velocidade. O rastreamento oferece suporte para depuração passiva (examinando o histórico de execução) e criação de perfil para ajuste de desempenho.
    • 7- módulo de depuração, 40 bits (endereço de 7 bits, uma palavra de dados longa de 32 bits e um bit R / W) usado para acessar breakpoints de hardware, watchpoints e muito mais. Eles podem ser gravados enquanto o processador está funcionando; ele não precisa estar no modo de depuração.
  • HALTe RESTART, instruções específicas-ARM11 para parar e reiniciar a CPU. Pará-lo coloca o núcleo no "Modo de Depuração", onde o ITR pode ser usado para executar instruções, incluindo o uso do DCC para transferir dados entre o host de depuração (JTAG) e a CPU.
  • ITRSEL, Instrução específica do ARM11 para acelerar algumas operações com ITR.

Esse modelo se assemelha ao modelo usado em outros núcleos ARM. Os sistemas não ARM geralmente têm recursos semelhantes, talvez implementados usando os protocolos Nexus em cima do JTAG ou outros esquemas específicos do fornecedor.

Os núcleos ARM7 e ARM9 mais antigos incluem um módulo EmbeddedICE que combina a maioria dessas instalações, mas tem um mecanismo estranho para a execução de instruções: o depurador deve conduzir o pipeline de instrução da CPU, relógio por relógio, e acessar diretamente os barramentos de dados para ler e gravar dados para a CPU. O ARM11 usa o mesmo modelo para suporte de rastreamento (ETM, ETB) que os núcleos mais antigos.

Os núcleos ARM Cortex mais recentes se assemelham a este modelo de depuração, mas se baseiam em uma Porta de Acesso de Depuração (DAP) em vez de acesso direto à CPU. Nesta arquitetura (denominada Tecnologia CoreSight ), o núcleo e o módulo JTAG são completamente independentes. Eles também são desacoplados do JTAG para que possam ser hospedados na interface SWD de dois fios do ARM (veja abaixo) em vez de apenas na interface JTAG de seis fios. (ARM pega os quatro sinais JTAG padrão e adiciona o TRST opcional, mais o sinal RTCK usado para relógio adaptativo.) O CoreSight JTAG-DP é assíncrono aos relógios principais e não implementa RTCK. Além disso, os núcleos mais recentes atualizaram o suporte de rastreamento.

Modo de parada de depuração

Uma maneira básica de depurar software é apresentar um modelo de thread único, em que o depurador interrompe periodicamente a execução do programa e examina seu estado conforme exposto pelo conteúdo do registro e pela memória (incluindo registros do controlador periférico). Quando eventos de programa interessantes se aproximam, uma pessoa pode querer instruções de passo único (ou linhas de código-fonte) para observar como um comportamento inadequado específico acontece.

Assim, por exemplo, um host JTAG pode HALT do núcleo, entrando no modo de depuração e, em seguida, ler os registros da CPU usando ITR e DCC. Depois de salvar o estado do processador, ele pode escrever esses registros com quaisquer valores de que precisa e, em seguida, executar algoritmos arbitrários na CPU, acessando a memória e os periféricos para ajudar a caracterizar o estado do sistema. Depois que o depurador executa essas operações, o estado pode ser restaurado e a execução continuada usando a instrução RESTART.

O modo de depuração também é inserido de forma assíncrona pelo módulo de depuração, acionando um watchpoint ou breakpoint, ou emitindo uma instrução BKPT (breakpoint) do software que está sendo depurado. Quando não está sendo usado para rastreamento de instrução, o ETM também pode acionar a entrada para o modo de depuração; ele oferece suporte a gatilhos complexos sensíveis ao estado e ao histórico, bem como às comparações de endereço simples expostas pelo módulo de depuração. As transições assíncronas para o modo de depuração são detectadas pesquisando o registro DSCR. É assim que a etapa única é implementada: HALT o núcleo, definir um ponto de interrupção temporário na próxima instrução ou próxima instrução de alto nível, RESTART, sondar o DSCR até detectar a entrada assíncrona para o estado de depuração, remover aquele ponto de interrupção temporário e repetir.

Depuração do modo monitor

O software moderno costuma ser muito complexo para funcionar bem com esse modelo de thread único. Por exemplo, um processador usado para controlar um motor (talvez um acionando uma lâmina de serra) pode não ser capaz de entrar com segurança no modo de parada; pode ser necessário continuar lidando com interrupções para garantir a segurança física de pessoas e / ou máquinas. Emitir uma instrução HALT usando JTAG pode ser perigoso.

Os processadores ARM suportam um modo de depuração alternativo, denominado Modo Monitor , para trabalhar com tais situações. (Isso é diferente do Modo de monitoramento seguro implementado como parte das extensões de segurança em núcleos ARM mais recentes; ele gerencia operações de depuração, não transições de segurança.) Nesses casos, pontos de interrupção e pontos de controle acionam um tipo especial de exceção de hardware, transferindo o controle para um " monitor de depuração "em execução como parte do software do sistema. Este monitor se comunica com o depurador usando o DCC e pode organizar, por exemplo, uma única etapa de um único processo enquanto outros processos (e manipuladores de interrupção) continuam em execução.

Extensões comuns

Os fornecedores de microprocessadores geralmente definem suas próprias extensões de depuração específicas do núcleo. Esses fornecedores incluem Infineon , MIPS com EJTAG e outros. Se o fornecedor não adota um padrão (como os usados ​​pelos processadores ARM ou Nexus), ele precisa definir sua própria solução. Se eles suportam varredura de limite, geralmente constroem a depuração sobre JTAG.

A Freescale tem COP e OnCE (Emulação On-Chip). OnCE inclui um comando JTAG que faz um TAP entrar em um modo especial onde o IR mantém comandos de depuração OnCE para operações como single stepping, breakpointing e acessando registradores ou memória. Ele também define EOnCE (Enhanced On-Chip Emulation) apresentado como abordando questões de tempo real.

ARM tem uma arquitetura de depuração de núcleo de processador extensa (CoreSight) que começou com EmbeddedICE (um recurso de depuração disponível na maioria dos núcleos ARM) e agora inclui muitos componentes adicionais, como um ETM (Embedded Trace Macrocell), com uma porta de rastreamento de alta velocidade, com suporte rastreamento multi-core e multithread. Observe que o rastreamento não é invasivo; os sistemas não precisam parar de operar para serem rastreados. (No entanto, os dados de rastreamento são muito volumosos para usar JTAG como mais do que um canal de controle de rastreamento.)

O Nexus define uma infraestrutura de depuração do processador que é amplamente independente do fornecedor. Uma de suas interfaces de hardware é JTAG. Ele também define uma interface de porta auxiliar de alta velocidade, usada para rastreamento e muito mais. O Nexus é usado com algumas plataformas mais recentes, como os processadores das séries Atmel AVR32 e Freescale MPC5500.

Usos

  • Exceto para alguns dos sistemas finais mais baixos, essencialmente todas as plataformas de sistemas incorporados têm uma porta JTAG para suportar depuração no circuito e programação de firmware, bem como para teste de varredura de limite:
    • Os processadores de arquitetura ARM vêm com suporte JTAG, às vezes suportando uma variante "SWD" de dois fios ou rastreamento de alta velocidade de tráfego em instruções ou barramentos de dados.
    • Os chips microcontroladores modernos de 8 e 16 bits , como os chips Atmel AVR e TI MSP430 , oferecem suporte à programação e depuração JTAG. No entanto, os chips menores podem não ter pinos suficientes para gastar (e, portanto, tendem a depender de interfaces de programação de fio único proprietárias); se a contagem de pinos for superior a 32, provavelmente há uma opção JTAG.
    • Quase todos os FPGAs e CPLDs usados ​​hoje podem ser programados por meio de uma porta JTAG. Um Teste Padrão e Linguagem de Programação é definido pelo padrão JEDEC JESD-71 para a programação JTAG de PLDs.
    • Muitos processadores MIPS e PowerPC têm suporte JTAG
    • Os processadores Intel Core, Xeon, Atom e Quark são compatíveis com o modo de teste JTAG com extensões específicas da Intel do JTAG usando a chamada porta de depuração eXtended de 60 pinos [XDP]. Além disso, o processador Quark suporta conectores de 10 pinos mais tradicionais.
    • Produtos de consumo, como aparelhos de rede e
    receptores / decodificadores integrados de televisão por satélite, costumam usar microprocessadores que suportam JTAG, fornecendo um meio alternativo para recarregar o firmware se o bootloader existente tiver sido corrompido de alguma maneira.
  • O conector padrão do barramento PCI contém sinais JTAG opcionais nos pinos 1–5; PCI Express contém sinais JTAG nos pinos 5–9. Um cartão JTAG especial pode ser usado para atualizar um BIOS corrompido .
  • O teste de varredura de limite e aplicativos de programação no sistema (dispositivo) às vezes são programados usando o formato vetorial serial , uma representação textual das operações JTAG usando uma sintaxe simples. Outros formatos de programação incluem 'JAM' e STAPL mais recentemente o IEEE Std. 1532 formato definido 'ISC' (abreviação de In-System Configuration). O formato ISC é usado em conjunto com modelos BSDL aprimorados para dispositivos lógicos programáveis ​​(ou seja, FPGAs e CPLDs) que incluem instruções adicionais ISC_ <operação> além das instruções básicas mínimas IEEE 1149.1. As ferramentas de programação FPGA da Xilinx , Altera, Lattice, Cypress, Actel, etc. normalmente são capazes de exportar esses arquivos.
  • Como mencionado, muitas placas incluem conectores JTAG, ou apenas almofadas, para apoiar as operações de fabricação, onde o teste de varredura de limite ajuda a verificar a qualidade da placa (identificando juntas de solda ruins, etc.) e para inicializar a memória flash ou FPGAs.
  • JTAG também pode oferecer suporte a atualizações de campo e solução de problemas.
  • Suporte ao cliente

    A interface JTAG do destino é acessada usando algum aplicativo habilitado para JTAG e algum hardware de adaptador JTAG. Há uma grande variedade de tais hardwares, otimizados para finalidades como teste de produção, depuração de sistemas de alta velocidade, desenvolvimento de microcontroladores de baixo custo e assim por diante. Da mesma forma, o software usado para conduzir esse hardware pode ser bastante variado. Os desenvolvedores de software usam principalmente JTAG para depurar e atualizar firmware.

    Conectores

    Um firewall Netgear FVS336G com um cabeçalho JTAG de 14 pinos no canto inferior esquerdo.
    Um modem ADSL Netgear DG632 com um cabeçalho JTAG de 8 pinos no local "5".

    Não há padrões oficiais para conectores físicos do adaptador JTAG. Placas de desenvolvimento geralmente incluem um cabeçalho para apoiar as ferramentas de desenvolvimento preferidas; em alguns casos, eles incluem vários cabeçalhos, porque precisam oferecer suporte a várias dessas ferramentas. Por exemplo, um microcontrolador, FPGA e processador de aplicativo ARM raramente compartilham ferramentas, portanto, uma placa de desenvolvimento que usa todos esses componentes pode ter três ou mais cabeçalhos. As placas de produção podem omitir os cabeçalhos ou, quando o espaço é limitado, podem fornecer acesso ao sinal JTAG usando pontos de teste.

    Algumas pinagens comuns para cabeçotes de pino de 2,54 mm (0,100 pol.) São:

    • ARM 2 × 10 pin (ou às vezes o 2 × 7 mais antigo), usado por quase todos os sistemas baseados em ARM
    • MIPS EJTAG (2 × 7 pinos) usado para sistemas baseados em MIPS
    • JTAG compatível com Altera ByteBlaster de 2 × 5 pinos estendido por muitos fornecedores
    • AVR de 2 × 5 pinos estende Altera JTAG com SRST (e em alguns casos TRST e uma saída de evento)
    • Texas Instruments de 2 × 7 pinos usado com DSPs e produtos baseados em ARM, como OMAP
    • 8 pinos (fila única) genérico PLD JTAG compatível com muitos cabos Lattice ispDOWNLOAD
    • Conectores MIPI 10- / 20 (1,27 mm 050 ") para JTAG, cJTAG e SWD

    Esses conectores tendem a incluir mais do que apenas os quatro sinais padronizados (TMS, TCK, TDI, TDO). Normalmente são fornecidos sinais de reinicialização, um ou ambos TRST (reinicialização TAP) e SRST (reinicialização do sistema). O conector geralmente fornece a tensão de alimentação lógica da placa sob teste para que os adaptadores JTAG usem os níveis lógicos apropriados. A tensão da placa também pode servir como uma entrada do depurador "presente na placa". Outros sinais de entrada ou saída de evento podem ser fornecidos, ou linhas de E / S de propósito geral (GPIO), para suportar arquiteturas de depuração mais complexas.

    Produtos de alta tecnologia freqüentemente usam conectores densos (freqüentemente conectores MICTOR de 38 pinos ) para suportar rastreamento de alta velocidade em conjunto com operações JTAG. Uma tendência recente é fazer com que as placas de desenvolvimento integrem uma interface USB ao JTAG, onde um segundo canal é usado para uma porta serial. (Placas menores também podem ser alimentadas por USB. Como os PCs modernos tendem a omitir as portas seriais, esses links de depuração integrados podem reduzir significativamente a desordem para os desenvolvedores.) Placas de produção geralmente dependem de conexões básicas para pontos de teste para teste e programação.

    Hardware do adaptador

    O hardware do adaptador varia muito. Quando não está integrado a uma placa de desenvolvimento, envolve um cabo curto para conectar a um conector JTAG na placa de destino; uma conexão com o host de depuração, como um link USB, PCI ou Ethernet; e eletrônica suficiente para adaptar os dois domínios de comunicação (e às vezes fornecer isolamento galvânico ). Pode ser necessária uma fonte de alimentação separada. Existem dois adaptadores "burros", onde o host decide e executa todas as operações JTAG; e os "inteligentes", onde parte desse trabalho é realizado dentro do adaptador, geralmente acionado por um microcontrolador. Os adaptadores "inteligentes" eliminam latências de link para sequências de operação que podem envolver a sondagem de mudanças de status entre as etapas e podem, portanto, oferecer um rendimento mais rápido.

    A partir de 2018, os adaptadores com um USB ligação a partir do host são a abordagem mais comum. Produtos de ponta freqüentemente suportam Ethernet , com a vantagem de que o host de depuração pode ser bastante remoto. Os adaptadores que suportam portas de rastreamento de alta velocidade geralmente incluem vários megabytes de buffer de rastreamento e fornecem links de alta velocidade (USB ou Ethernet) para levar esses dados ao host.

    Os adaptadores de porta paralela são simples e baratos, mas são relativamente lentos porque usam a CPU do host para alterar cada bit (" bit banging "). Sua utilidade diminuiu porque a maioria dos computadores nos últimos anos não tem uma porta paralela. O suporte do driver também é um problema, porque o uso de pinos pelos adaptadores varia muito. Como a porta paralela é baseada no nível lógico de 5 V, a maioria dos adaptadores não tinha suporte de conversão de tensão para tensões alvo de 3,3 V ou 1,8 V.

    Adaptadores de porta serial RS-232 também existem e estão diminuindo de forma semelhante em utilidade. Eles geralmente envolvem um bit banging mais lento do que uma porta paralela ou um microcontrolador traduzindo algum protocolo de comando para operações JTAG. Esses adaptadores seriais também não são rápidos, mas seus protocolos de comando geralmente podem ser reutilizados no topo de links de velocidade mais alta.

    Com todos os adaptadores JTAG, o suporte de software é uma preocupação básica. Muitos fornecedores não publicam os protocolos usados ​​por seu hardware de adaptador JTAG, limitando seus clientes às cadeias de ferramentas suportadas por esses fornecedores. Este é um problema específico para adaptadores "inteligentes", alguns dos quais incorporam uma quantidade significativa de conhecimento sobre como interagir com CPUs específicas.

    Desenvolvimento de software

    A maioria dos ambientes de desenvolvimento para software embarcado inclui suporte JTAG. Existem, em termos gerais, três fontes de tal software:

    • Os fornecedores de chips podem fornecer as ferramentas, geralmente exigindo um adaptador JTAG que eles fornecem. Os exemplos incluem fornecedores de FPGA como Xilinx e Altera , Atmel para suas linhas de produtos AVR8 e AVR32 e Texas Instruments para a maioria de seus produtos DSP e micro. Essas ferramentas tendem a ter muitos recursos e podem ser a única opção real para chips altamente especializados, como FPGAs e DSPs. As ferramentas de software mais simples podem ser fornecidas gratuitamente. Os adaptadores JTAG em si não são gratuitos, embora às vezes sejam incluídos em placas de desenvolvimento.
    • Os fornecedores de ferramentas podem fornecê-los, geralmente em conjunto com vários fornecedores de chips para fornecer suporte de desenvolvimento de plataforma cruzada. Os produtos baseados em ARM têm um mercado de terceiros particularmente rico, e vários desses fornecedores se expandiram para plataformas não ARM, como MIPS e PowerPC . Os fornecedores de ferramentas às vezes criam produtos em torno de software livre, como GCC e GDB , com suporte a GUI frequentemente usando Eclipse . Os adaptadores JTAG às vezes são vendidos junto com pacotes de suporte.
    • Existem ferramentas de código aberto . Como observado acima, GCC e GDB formam o núcleo de uma boa cadeia de ferramentas e existem ambientes GUI para suportá-los.

    Todos esses softwares tendem a incluir suporte a depurador básico: parada, parada, passo único, pontos de interrupção, navegação na estrutura de dados e assim por diante. Ferramentas comerciais tendem a fornecer ferramentas como simuladores muito precisos e análise de rastreamento, que não estão disponíveis atualmente como código aberto.

    Padrões de interface semelhantes

    O Serial Wire Debug (SWD) é uma interface elétrica de 2 pinos alternativa que usa o mesmo protocolo. Ele usa a conexão GND existente. O SWD usa um protocolo de fio bidirecional padrão da CPU ARM, definido na interface de depuração ARM v5. Isso permite que o depurador se torne outro mestre de barramento AMBA para acessar a memória do sistema e os registros de periféricos ou de depuração. A taxa de dados é de até 4 MB / s a 50 MHz . O SWD também possui detecção de erros embutida. Em dispositivos JTAG com capacidade SWD, o TMS e TCK são usados ​​como sinais SWDIO e SWCLK, fornecendo para programadores de modo duplo.

    Veja também

    Referências

    links externos