Guia do usuário do software Cortex-M de depuração NXP AN14120

Introdução

Este documento descreve a compilação cruzada, a implantação e a depuração de um aplicativo para a família i.MX 8M, i.MX 8ULP e processador i.MX 93 Cortex-M usando o Microsoft Visual Studio Code.

ambiente de software

A solução pode ser implementada tanto no host Linux quanto no Windows. Para esta nota de aplicação, um PC com Windows é considerado, mas não obrigatório.
A versão 6.1.22_2.0.0 do Linux BSP é usada nesta nota de aplicação. As seguintes imagens pré-construídas são usadas:

  • i.MX 8M Mini: imx-image-full-imx8mmevk.wic
  • i.MX 8M Nano: imx-image-full-imx8mnevk.wic
  • i.MX 8M Plus: imx-image-full-imx8mpevk.wic
  • i.MX 8ULP: imx-image-full-imx8ulpevk.wic
  • i.MX 93: imx-imagem-completa-imx93evk.wic

Para obter etapas detalhadas sobre como construir essas imagens, consulte o Guia do usuário do i.MX Linux (documento IMXLUG) e o Guia do usuário do projeto i.MX Yocto (documento IMXLXYOCTOUG).
Se um PC com Windows for usado, grave a imagem pré-construída no cartão SD usando Win32 Disk Imager (https:// win32diskimager.org/) ou Balena Etcher (https://etcher.balena.io/). Se um PC Ubuntu for usado, escreva a imagem pré-construída no cartão SD usando o comando abaixo:

$ sudo dd if=.wic of=/dev/sd bs=1M status=progress conv=fsync

Observação: Verifique a partição do leitor de cartão e substitua sd pela partição correspondente. 1.2

Configuração de hardware e equipamentos

  • Kit de desenvolvimento:
    • NXP i.MX 8MM EVK LPDDR4
    • NXP i.MX 8MN EVK LPDDR4
    • NXP i.MX 8MP EVK LPDDR4
    • NXP i.MX 93 EVK para 11×11 mm LPDDR4 – NXP i.MX 8ULP EVK LPDDR4
  • Cartão Micro SD: SanDisk Ultra 32 GB Micro SDHC I Classe 10 é usado para o experimento atual.
  • Cabo micro-USB (i.MX 8M) ou Tipo C (i.MX 93) para porta de depuração.
  • Sonda de depuração SEGGER J-Link.

Pré-requisitos

Antes de iniciar a depuração, vários pré-requisitos devem ser atendidos para ter um ambiente de depuração configurado corretamente.
PC Host – conexão de depuração da placa i.MX
Para estabelecer a conexão de depuração de hardware, execute as seguintes etapas:

  1. Conecte a placa i.MX ao PC host através do DEBUG USB-UART e do conector PC USB usando um cabo USB. O sistema operacional Windows encontra os dispositivos seriais automaticamente.
  2. No Gerenciador de Dispositivos, em Portas (COM e LPT), encontre duas ou quatro portas seriais USB (COM). Uma das portas é usada para mensagens de depuração geradas pelo núcleo Cortex-A e a outra é para o núcleo Cortex-M. Antes de determinar a porta correta necessária, lembre-se:
    • [i.MX 8MP, i.MX 8ULP, i.MX 93]: Existem quatro portas disponíveis no Device Manager. A última porta é para depuração do Cortex-M e a penúltima porta é para depuração do Cortex-A, contando as portas de depuração em ordem crescente.
    • [i.MX 8MM, i.MX 8MN]: Existem duas portas disponíveis no Gerenciador de Dispositivos. A primeira porta é para depuração do Cortex-M e a segunda porta é para depuração do Cortex-A, contando as portas de depuração em ordem crescente.
  3. Abra a porta de depuração correta usando seu emulador de terminal serial preferido (por exemploample PuTTY) definindo os seguintes parâmetros:
    • Velocidade até 115200 bps
    • 8 bits de dados
    • 1 bit de parada (115200, 8N1)
    • Sem paridade
  4. Conecte a sonda de depuração SEGGER USB ao host e, em seguida, conecte o SEGGER JTAG conector para placa i.MX JTAG interface. Se a placa i.MX JTAG interface não possui conector guiado, a orientação é determinada alinhando o fio vermelho ao pino 1, conforme Figura 1.

Configuração do código VS

Para baixar e configurar o VS Code, execute as seguintes etapas:

  1. Baixe e instale a versão mais recente do Microsoft Visual Studio Code do site oficial website. No caso de usar o Windows como sistema operacional host, escolha o botão “Download para Windows” na página principal do Visual Studio Code.
  2. Após instalar o Visual Studio Code, abra-o e escolha a aba “Extensões” ou pressione a combinação Ctrl + Shift + X.
  3. Na barra de pesquisa dedicada, digite MCUXpresso for VS Code e instale a extensão. Uma nova guia aparece no lado esquerdo da janela do VS Code.

Configuração da extensão MCUXpresso 

Para configurar a extensão MCUXpresso, execute as seguintes etapas:

  1. Clique na guia dedicada da extensão MCUXpresso na barra lateral esquerda. No PAINEL QUICKSTART, clique em
    Abra o instalador MCUXpresso e dê permissão para baixar o instalador.
  2. A janela do instalador aparece em pouco tempo. Clique em MCUXpresso SDK Developer e em SEGGER JLink e clique no botão Instalar. O instalador instala o software necessário para arquivos, conjunto de ferramentas, suporte Python, Git e sonda de depuração

Após a instalação de todos os pacotes, certifique-se de que a sonda J-Link esteja conectada ao PC host. Em seguida, verifique se a sonda também está disponível na extensão MCUXpresso em DEBUG PROBES view, conforme mostrado na Figura

Importar MCUXpresso SDK

Dependendo da placa que você está executando, construa e baixe o SDK específico do site oficial da NXP website. Para esta nota de aplicação, os seguintes SDKs foram testados:

  • SDK_2.14.0_EVK-MIMX8MM
  • SDK_2.14.0_EVK-MIMX8MN
  • SDK_2.14.0_EVK-MIMX8MP
  • SDK_2.14.0_EVK-MIMX8ULP
  • SDK_2.14.0_MCIMX93-EVK

Para construir um examparquivo para i.MX 93 EVK, consulte a Figura 7:

  1. Para importar um repositório MCUXpresso SDK no VS Code, execute as seguintes etapas:
  2. Depois de baixar o SDK, abra o Visual Studio Code. Clique na guia MCUXpresso do lado esquerdo e expanda REPOSITÓRIOS e PROJETOS INSTALADOS views.
  3. Clique no Repositório de Importação e selecione ARQUIVO LOCAL. Clique em Procurar… correspondente ao campo Arquivo e selecione o arquivo SDK baixado recentemente.
  4. Selecione o caminho onde o arquivo será descompactado e preencha o campo Localização.
  5. O campo Nome pode ser deixado como padrão ou você pode escolher um nome personalizado.
  6. Marque ou desmarque Criar repositório Git com base em suas necessidades e clique em Importar.

Importar um example aplicativo

Quando o SDK é importado, ele aparece sob o REPOSITÓRIOS INSTALADOS view.
Para importar um examparquivo do repositório SDK, execute as seguintes etapas:

  1. Clique no Importar Examparquivo do botão Repositório em PROJETOS view.
  2. Escolha um repositório na lista suspensa.
  3. Escolha o conjunto de ferramentas na lista suspensa.
  4. Escolha o quadro-alvo.
  5. Escolha o ex demo_apps/hello_worldamparquivo da lista Escolha um modelo.
  6. Escolha um nome para o projeto (o padrão pode ser usado) e defina o caminho para o local do projeto.
  7. Clique em Criar.
  8. Execute as etapas a seguir apenas para a família i.MX 8M. Nos PROJETOS view, expanda o projeto importado. Vá para a seção Configurações e clique em mcuxpresso-tools.json file.
    a. Adicione “interface”: “JTAG”Em “depurar”> “segger”
    b. Para i.MX 8MM, adicione a seguinte configuração: “device”: “MIMX8MM6_M4” em “debug” > “segger”
    c. Para i.MX 8MN, adicione a seguinte configuração: “device”: “MIMX8MN6_M7” em “debug” > “segger”
    d. Para i.MX 8MP, adicione a seguinte configuração:

    “dispositivo”: “MIMX8ML8_M7” em “depurar”> “segger”
    O código a seguir mostra um examparquivo para a seção de “depuração” do i.MX8 MP após as modificações acima de mcuxpresso-tools.json terem sido realizadas:

Depois de importar o example aplicativo com sucesso, ele deve estar visível na seção PROJETOS view. Além disso, a fonte do projeto files são visíveis na guia Explorer (Ctrl + Shift + E).

Construindo o aplicativo

Para construir o aplicativo, pressione o ícone esquerdo Build Selected, conforme mostrado na Figura 9.

Prepare a placa para o depurador

Para usar o JTAG para depurar aplicativos Cortex-M, existem alguns pré-requisitos dependendo da plataforma:

  1. Para i.MX 93
    Para suportar i.MX 93, o patch para SEGGER J-Link deve ser instalado: SDK_MX93_3RDPARTY_PATCH.zip.
    Observação: Este patch deve ser usado, mesmo que já tenha sido instalado. Após a conclusão do download, descompacte o arquivo e copie o diretório Devices e o JLinkDevices.xml file para C:\Programa Files\SEGGER\JLink. Se um PC Linux for usado, o caminho de destino será /opt/SEGGER/JLink.
    • Depurando o Cortex-M33 enquanto apenas o Cortex-M33 está em execução
      Neste modo, a chave do modo de inicialização SW1301[3:0] deve ser definida como [1010]. Em seguida, a imagem M33 pode ser carregada e depurada diretamente usando o botão de depuração. Para obter mais detalhes, consulte a Seção 5.
      Se o Linux rodando no Cortex-A55 for necessário em paralelo com o Cortex-M33, existem duas maneiras de depurar o Cortex-M33:
    • Depurando o Cortex-M33 enquanto o Cortex-A55 está no U-Boot
      Primeiro, copie o sdk20-app.bin file (localizado no diretório armgcc/debug) gerado na Seção 3 na partição de inicialização do cartão SD. Inicialize a placa e pare-a no U-Boot. Quando o switch de inicialização está configurado para inicializar o Cortex-A, a sequência de inicialização não inicia o Cortex-M. Deve ser iniciado manualmente usando os comandos abaixo. Se o Cortex-M não for iniciado, o JLink não conseguirá se conectar ao núcleo.
    • Nota: Se o sistema não puder ser depurado normalmente, tente clicar com o botão direito do mouse no projeto no MCUXpresso for VS
      Codifique e escolha “Anexar para depurar o projeto”.
    • Depurando o Cortex-M33 enquanto o Cortex-A55 está no Linux
      O Kernel DTS deve ser modificado para desabilitar o UART5, que usa os mesmos pinos do JTAG interface.
      Se for usado um PC com Windows, o mais fácil é instalar WSL + Ubuntu 22.04 LTS e depois fazer a compilação cruzada do DTS.
      Após a instalação do WSL + Ubuntu 22.04 LTS, abra a máquina Ubuntu rodando em WSL e instale os pacotes necessários:

      Agora, as fontes do Kernel podem ser baixadas:

      Para desativar o periférico UART5, procure o nó lpuart5 em linux-imx/arch/arm64/boot/dts/freescale/imx93-11×11-evk.dts file e substitua o status ok por desativado:
      Recompile o DTS:

      Copie o recém-criado linux-imx/arch/arm64/boot/dts/freescale/imx93 11×11-evk.dtb file na partição de inicialização do cartão SD. Copie o hello_world.elf file (localizado no diretório armgcc/debug) gerado na Seção 3 na partição de inicialização do cartão SD. Inicialize a placa no Linux. Como a ROM de inicialização não inicia o Cortex-M quando o Cortex-A é inicializado, o CortexM deve ser iniciado manualmente.

      Observação: O hello_world.elf file deve ser colocado no diretório /lib/firmware.
  2. Para i.MX 8M
    Para suportar o i.MX 8M Plus, o patch para SEGGER J-Link deve ser instalado:
    iar_segger_support_patch_imx8mp.zip.
    Após a conclusão do download, descompacte o arquivo e copie o diretório Dispositivos e o
    Dispositivos JLink.xml file do diretório JLink para C:\Program Files\SEGGER\JLink. Se um PC Linux
    é usado, o caminho de destino é /opt/SEGGER/JLink.
    • Depurando o Cortex-M enquanto o Cortex-A está no U-Boot
      Neste caso, nada de especial deve ser feito. Inicialize a placa em U Boot e vá para a Seção 5.
    • Depurando o Cortex-M enquanto o Cortex-A está no Linux
      Para executar e depurar o aplicativo Cortex-M em paralelo com o Linux rodando no Cortex-A, o relógio específico deve ser atribuído e reservado para o Cortex-M. Isso é feito dentro do U-Boot. Pare a placa no U-Boot e execute os comandos abaixo:
  3. Para i.MX 8ULP
    Para suportar o i.MX 8ULP, o patch para SEGGER J-Link deve ser instalado: SDK_MX8ULP_3RDPARTY_PATCH.zip.
    Observação: Este patch deve ser usado mesmo se já tiver sido instalado.
    Após o download, descompacte o arquivo e copie o diretório Devices e o JLinkDevices.xml file para C:\Programa Files\SEGGER\JLink. Se um PC Linux for usado, o caminho de destino será /opt/SEGGER/JLink. Para i.MX 8ULP, devido à unidade Upower, crie primeiro o flash.bin usando m33_image em nosso repositório “VSCode”. A imagem M33 pode ser encontrada em {CURRENT REPO}\armgcc\debug\sdk20-app.bin. Consulte a Seção 6 de Introdução ao MCUX presso SDK para EVK-MIMX8ULP e EVK9-MIMX8ULP em SDK_2_xx_x_EVK-MIMX8ULP/docs sobre como construir a imagem flash.bin.
    Observação: Use a imagem M33 no repositório VSCode ativo. Caso contrário, o programa não será anexado corretamente. Clique com o botão direito e escolha “Anexar”.

Executando e depurando

Após pressionar o botão de depuração, escolha a configuração do projeto Debug e a sessão de depuração será iniciada.

Quando uma sessão de depuração é iniciada, um menu dedicado é exibido. O menu de depuração possui botões para iniciar a execução até que um ponto de interrupção seja acionado, pausar a execução, passar por cima, entrar, sair, reiniciar e parar.
Além disso, podemos ver variáveis ​​locais, registrar valores, observar algumas expressões e verificar a pilha de chamadas e pontos de interrupção
no navegador esquerdo. Essas regiões de função estão na guia “Executar e Depurar”, e não no MCUXpresso
para o Código VS.

Nota sobre o código-fonte no documento

ExampO código mostrado neste documento tem os seguintes direitos autorais e licença BSD-3-Clause:

Copyright 2023 NXP A redistribuição e o uso em formato fonte e binário, com ou sem modificação, são permitidos desde que as seguintes condições sejam atendidas:

  1. As redistribuições do código-fonte devem manter o aviso de direitos autorais acima, esta lista de condições e o seguinte aviso de isenção de responsabilidade.
  2. As redistribuições em formato binário devem reproduzir o aviso de direitos autorais acima, esta lista de condições e a seguinte isenção de responsabilidade na documentação e/ou outros materiais devem ser fornecidas com a distribuição.
  3. Nem o nome do detentor dos direitos autorais nem os nomes de seus colaboradores podem ser usados ​​para endossar ou promover produtos derivados deste software sem permissão prévia específica por escrito.

    ESTE SOFTWARE É FORNECIDO PELOS DETENTORES DE DIREITOS AUTORAIS E COLABORADORES “NO ESTADO EM QUE SE ENCONTRAM” E QUAISQUER GARANTIAS EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO SE LIMITANDO A, GARANTIAS IMPLÍCITAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO A UM DETERMINADO FIM SÃO REJEITADAS. EM HIPÓTESE ALGUMA O DETENTOR DOS DIREITOS AUTORAIS OU COLABORADORES SERÃO RESPONSÁVEIS POR QUAISQUER DANOS DIRETOS, INDIRETOS, INCIDENTAIS, ESPECIAIS, EXEMPLARES OU CONSEQUENCIAIS (INCLUINDO, MAS NÃO SE LIMITANDO A, AQUISIÇÃO DE BENS OU SERVIÇOS SUBSTITUTOS; PERDA DE USO, DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) QUALQUER CAUSA E SOBRE QUALQUER TEORIA DE RESPONSABILIDADE, SEJA POR CONTRATO, RESPONSABILIDADE ESTRITA OU ATO ILÍCITO (INCLUINDO NEGLIGÊNCIA OU DE OUTRA FORMA) DECORRENTE DE QUALQUER FORMA DO USO DESTE SOFTWARE, MESMO QUE AVISADO DA POSSIBILIDADE DE TAIS DANOS

Informações legais

Definições

Rascunho — O status de rascunho em um documento indica que o conteúdo ainda está
sob re internoview e sujeito à aprovação formal, o que pode resultar em modificações ou adições. A NXP Semiconductors não fornece nenhuma representação ou garantia quanto à precisão ou integridade das informações incluídas em uma versão de rascunho de um documento e não terá nenhuma responsabilidade pelas consequências do uso de tais informações.

Isenções de responsabilidade

Garantia e responsabilidade limitadas — As informações contidas neste documento são consideradas precisas e confiáveis. No entanto, a NXP Semiconductors não oferece quaisquer representações ou garantias, expressas ou implícitas, quanto à exatidão ou integridade de tais informações e não terá qualquer responsabilidade pelas consequências do uso de tais informações. A NXP Semiconductors não se responsabiliza pelo conteúdo deste documento se fornecido por uma fonte de informações fora da NXP Semiconductors. Em nenhum caso a NXP Semiconductors será responsável por quaisquer danos indiretos, incidentais, punitivos, especiais ou consequenciais (incluindo - sem limitação - lucros cessantes, economias perdidas, interrupção de negócios, custos relacionados à remoção ou substituição de quaisquer produtos ou encargos de retrabalho), sejam eles ou não, tais danos são baseados em ato ilícito (incluindo negligência), garantia, quebra de contrato ou qualquer outra teoria jurídica.
Não obstante quaisquer danos que o cliente possa incorrer por qualquer motivo, a responsabilidade agregada e cumulativa da NXP Semiconductors para com o cliente pelos produtos descritos neste documento será limitada de acordo com os Termos e condições de venda comercial da NXP Semiconductors.

Direito de fazer alterações
— A NXP Semiconductors reserva-se o direito de fazer alterações nas informações publicadas neste documento, incluindo, sem limitação, especificações e descrições de produtos, a qualquer momento e sem aviso prévio. Este documento substitui todas as informações fornecidas antes de sua publicação.

Adequação para uso — Os produtos da NXP Semiconductors não são projetados, autorizados ou garantidos para serem adequados para uso em sistemas ou equipamentos de suporte à vida, críticos para a vida ou para a segurança, nem em aplicações onde se possa razoavelmente esperar que falha ou mau funcionamento de um produto da NXP Semiconductors resulte em danos pessoais. ferimentos, morte ou graves danos materiais ou ambientais. A NXP Semiconductors e seus fornecedores não se responsabilizam pela inclusão e/ou uso de produtos NXP Semiconductors em tais equipamentos ou aplicações e, portanto, tal inclusão e/ou uso é por conta e risco do cliente.

Aplicações — Aplicações descritas aqui para qualquer um desses
produtos são apenas para fins ilustrativos. A NXP Semiconductors não faz nenhuma declaração ou garantia de que tais aplicações serão adequadas para o uso especificado sem testes ou modificações adicionais.
Os clientes são responsáveis ​​pelo projeto e operação de seus
aplicações e produtos que usam produtos da NXP Semiconductors, e a NXP Semiconductors não se responsabiliza por qualquer assistência com aplicações ou design de produto do cliente. É de responsabilidade exclusiva do cliente determinar se o produto NXP Semiconductors é adequado e adequado para as aplicações e produtos planejados do cliente, bem como para a aplicação planejada e uso de clientes terceirizados do cliente. Os clientes devem fornecer proteções adequadas de projeto e operação para minimizar os riscos associados às suas aplicações e produtos.
A NXP Semiconductors não aceita qualquer responsabilidade relacionada a qualquer inadimplência, dano, custo ou problema que seja baseado em qualquer fraqueza ou inadimplência nas aplicações ou produtos do cliente, ou na aplicação ou uso por cliente(s) terceirizado(s) do cliente. O Cliente é responsável por fazer todos os testes necessários para as aplicações e produtos do cliente usando produtos NXP Semiconductors, a fim de evitar um padrão das aplicações e dos produtos ou da aplicação ou uso por terceiros do cliente.

Termos e condições de venda comercial — Os produtos da NXP Semiconductors são vendidos sujeitos aos termos e condições gerais de venda comercial, conforme publicado em https://www.nxp.com/profile/termos, salvo acordo em contrário em um contrato individual válido por escrito. No caso de um acordo individual ser celebrado, apenas serão aplicados os termos e condições do respectivo acordo. A NXP Semiconductors se opõe expressamente à aplicação dos termos e condições gerais do cliente com relação à compra de produtos NXP Semiconductors pelo cliente.

Controle de exportação — Este documento, bem como o(s) item(ns) aqui descrito(s) podem estar sujeitos a regulamentos de controle de exportação. A exportação pode exigir uma autorização prévia das autoridades competentes.

Adequação para uso em produtos qualificados não automotivos — A menos que este documento declare expressamente que este produto específico da NXP Semiconductors
o produto for qualificado para automóveis, o produto não é adequado para uso automotivo. Não é qualificado nem testado de acordo com testes automotivos ou requisitos de aplicação. A NXP Semiconductors não se responsabiliza pela inclusão e/ou uso de produtos qualificados não automotivos em equipamentos ou aplicações automotivas.
Caso o cliente utilize o produto para projeto e uso em
aplicações automotivas de acordo com especificações e padrões automotivos,
cliente (um) deverá usar o produto sem a garantia da NXP Semiconductors do produto para tais aplicações automotivas, uso e especificações, e (b) sempre que o cliente usar o produto para aplicações automotivas além das especificações da NXP Semiconductors, tal uso será exclusivamente por conta e risco do cliente, e (c) o cliente indenizará totalmente a NXP Semiconductors por qualquer responsabilidade, danos ou reclamações de produtos com falha resultantes do projeto do cliente e uso do produto para aplicações automotivas além da garantia padrão da NXP Semiconductors e das especificações de produto da NXP Semiconductors.

Traduções — Uma versão não inglesa (traduzida) de um documento, incluindo as informações legais nesse documento, é apenas para referência. A versão em inglês prevalecerá em caso de discrepância entre as versões traduzida e em inglês.

Segurança — O cliente entende que todos os produtos NXP podem estar sujeitos a vulnerabilidades não identificadas ou podem oferecer suporte a padrões ou especificações de segurança estabelecidos com limitações conhecidas. O Cliente é responsável pelo projeto e operação de seus aplicativos e produtos ao longo de seus ciclos de vida para reduzir o efeito dessas vulnerabilidades nos aplicativos e produtos do cliente. A responsabilidade do cliente também se estende a outras tecnologias abertas e/ou proprietárias suportadas pelos produtos NXP para uso em aplicativos do cliente. A NXP não aceita nenhuma responsabilidade por qualquer vulnerabilidade. O cliente deve verificar regularmente as atualizações de segurança do NXP e fazer o acompanhamento adequado.
O Cliente selecionará produtos com recursos de segurança que melhor atendam às regras, regulamentos e padrões da aplicação pretendida e tomará as decisões finais de projeto em relação aos seus produtos e será o único responsável pela conformidade com todos os requisitos legais, regulatórios e relacionados à segurança relativos aos seus produtos, independentemente de qualquer informação ou suporte que possa ser fornecido pela NXP. A NXP possui uma Equipe de Resposta a Incidentes de Segurança de Produtos (PSIRT) (acessível em PSIRT@nxp.com) que gerencia a investigação, relatórios e lançamento de soluções para vulnerabilidades de segurança dos produtos NXP.
NXP BV — A NXP BV não é uma empresa operacional e não distribui ou vende produtos.

Documentos / Recursos

Software Cortex-M de depuração NXP AN14120 [pdf] Guia do Usuário
i.MX 8ULP, i.MX 93, software Cortex-M de depuração AN14120, AN14120, software Cortex-M de depuração, software Cortex-M, software

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *