NXP

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

K32W

Este ejemplo funciona como un tipo de dispositivo de bombilla, con capacidades de encendido y apagado. Los pasos se verificaron en la placa de desarrollo NXP K32W (kit de desarrollo IOTZTB-DK006).

Configuración inicial

  1. Asegúrate de tener Python3 y estos paquetes instalados. Los pasos de este documento se validaron con Python 3.8.
  2. Descarga y, luego, instala el SDK de MCUXpresso K32W061 2.6.9.
  3. Una vez que se haya compilado el SDK, descarga el paquete de SDK y extráelo en el directorio principal. Establece la variable de entorno NXP_K32W0_SDK_ROOT en el lugar en que extrajiste el SDK. También recomendamos agregar este comando al archivo .*rc de la shell que usas, como .zshrc:
    export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
  4. Clona e inicializa el repositorio NXP/Micro:

    git clone https://github.com/NXPmicro/matter.git
    cd matter
    git fetch origin v1.0-branch-nxp
    git checkout FETCH_HEAD
    git submodule update --init --recursive
    source ./scripts/activate.sh
    

  5. En el ejemplo, se usa la configuración "Nodo genérico de cambio". Asegúrate de que los puentes JP4/JP7 estén ubicados en el extremo izquierdo (LPC-JN UART0):
    imagen

  1. Descarga e instala JLink en tu computadora.
  2. En la placa, asegúrate de que esté seleccionado DFU en el puente BOOT junto al puerto USB y conecta la placa a la computadora con un cable mini USB.
    imagen
  3. Descarga y, luego, instala LPCScrypt en tu computadora.
    1. En MacOS, haga doble clic en el paquete descargado para instalarlo.
    2. Para Linux, ve a la carpeta en la que descargas el paquete:
      chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
      ./lpcscrypt-2.1.2_57.x86_64.deb.bin
  4. Una vez que LPCScrypt esté instalada, ejecuta esta secuencia de comandos para reprogramar tu placa (reemplaza <LPCScrypt_InstallDir> por la ruta de instalación real de LPCScrypt):
    <LPCScrypt_InstallDir>/scripts/program_JLINK
  5. Deberías ver mensajes similares a los siguientes. Presiona la barra espaciadora para comenzar a programar. Cuando termines, presiona Intro para salir.
    LPCScrypt - J-Link firmware programming script v2.1.2 Nov 2020.
    
    Connect an LPC-Link2 or LPCXpresso V2/V3 Board via USB then press Space.
    Booting LPCScrypt
    .
    LPCXpresso V2/V3 programmed with
    Firmware_JLink_LPCXpressoV2_20190404.bin
    -To use: remove DFU link and reboot the board
    
    Connect next board then press Space (or <return> to Quit)
  6. Desconecta la placa y vuelve a cambiar el puente de arranque a NORMAL. Se reconfiguró la placa para que use JLink a fin de instalar una imagen.
    imagen

Compila la imagen

  1. Prepara el repositorio:
    source ./scripts/activate.sh
  2. Instala las dependencias:
    pip3 install pycrypto pycryptodome
  3. Actualiza VENDOR_ID en la configuración de tu proyecto de ejemplo (CHIPProjectConfig.h). Este debe ser tu VID de acuerdo con la CSA. Matter specification, or a VID allocated for testing purposes. The value you provide for VENDOR_ID must match the one you use when creating the Matter integration in the Google Home Developer Console .
    grep VENDOR_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
     * CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
    #define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID your-hex-VID
  4. Verifica la PRODUCT_ID en la configuración del proyecto de ejemplo (CHIPProjectConfig.h). El valor de PRODUCT_ID puede permanecer igual que el predeterminado del ejemplo o cambiar según lo desees, pero debe cumplir con las restricciones de ID del producto descritas en los requisitos previos actuales. Además, ten en cuenta que el valor que proporcionas para PRODUCT_ID debe coincidir con el que usas cuando creas la integración Matter en Developer Console.
    grep PRODUCT_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
     * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
    #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x4B4C
  5. Compila la app de iluminación:
    1. Si la placa de expansión OM15082 está conectada a tu placa K32W, asegúrate de establecer el argumento de compilación chip_with_OM15082 en 1:
      cd examples/lighting-app/nxp/k32w/k32w0/
      gn gen out/debug --args="k32w0_sdk_root="${NXP_K32W0_SDK_ROOT}" chip_with_OM15082=1 chip_with_ot_cli=0 is_debug=false chip_crypto="platform" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
      ninja -C out/debug
    2. Si la placa de expansión OM15082 no está conectada, omite el argumento de compilación chip_with_OM15082:
      cd examples/lighting-app/nxp/k32w/k32w0/
      gn gen out/debug --args="k32w0_sdk_root="${NXP_K32W0_SDK_ROOT}" chip_with_ot_cli=0 is_debug=false chip_crypto="platform" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
      ninja -C out/debug
      Ten en cuenta que el tokenizador de pigweed, que es un módulo de pigweed que permite generar un hash para las strings a fin de reducir en gran medida el flash necesario para los registros, se habilita más arriba mediante la configuración de chip_pw_tokenizer_logging en true. La secuencia de comandos de detokenizador será necesaria para analizar las secuencias de comandos con hash. Consulta aquí para obtener más información.
  6. Para usuarios de MacOS (omite este paso si NO estás compilando en MacOS):

    Abre la secuencia de comandos sign_images.sh (ubicada en $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh) en un editor de texto y realiza los siguientes cambios:

    1. Marca como comentario o quita estas líneas para resolver el error "paquete no instalado" en MacOS:
      is_linux_package_installed "python3"
      is_linux_package_installed "python3-pip"
    2. Corrige el argumento a la utilidad file ("-ib" debería ser "-Ib"), de lo contrario, la secuencia de comandos de firma no generará un archivo .bin de forma silenciosa:
      MIME_SET="$(file -ib $FILENAME)"
      Cambia a:
      MIME_SET="$(file -Ib $FILENAME)"
  7. Firma la imagen:

    chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
    $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/

Cómo escribir en la placa

  1. Inicia la línea de comandos de JLink con la placa conectada mediante un cable USB pequeño:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  2. En la línea de comandos de JLink, ingresa el comando erase para limpiar una imagen existente en la pizarra. Esto es necesario si has escrito la pizarra en la memoria flash antes.
    erase
    Without any give address range, Erase Chip will be executed
    Erasing device...
    J-Link: Flash download: Total time needed: 2.878s (Prepare: 0.051s, Compare: 0.000s, Erase: 2.789s, Program: 0.000s, Verify: 0.000s, Restore: 0.037s)
    Erasing done.
  3. Luego, instala la imagen con el comando loadbin:
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
    .
  4. Escriba exit para salir de la CLI de JLink.
  5. Reiniciar JLink:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  6. Vuelve a escribir la imagen en la memoria flash, y omite el comando erase esta vez:
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
  7. Una vez que se complete el comando loadbin, presiona el botón SW2 en la placa de expansión para restablecer la configuración de fábrica y, luego, presiona el botón SW4 RESET en la placa principal para comenzar a ejecutar la imagen.

Valida el ejemplo

  1. El dispositivo debe presentarse como un dispositivo serial USB en tu computadora. Puedes buscarlo en /dev/:
    ls -la /dev/tty*
    . Puedes abrir la consola en serie con la secuencia de comandos python3 detokenizer.py, que es una secuencia de comandos que decodifica los registros con asignación de token de Pigweed de un puerto en serie. Por ejemplo, si el dispositivo está en /dev/ttyACM0:
    python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
  2. Para restablecer la configuración de fábrica de la placa, presiona el botón SW2. LED2 y LED3 parpadearán durante un tiempo. Deberías ver mensajes como este en la consola en serie:
    [Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel!
    [Info]Device will factory reset...
    [Info]Performing factory reset
  3. Para activar o desactivar el estado de la bombilla, haz clic en el botón SW3. Debería cambiarse a la luz LED D3.

Requisitos previos de la puesta en marcha

Antes de poner en marcha la placa de desarrollo NXP K32W, ten en cuenta lo siguiente:

  1. Se debe habilitar la publicidad BLE para que el dispositivo se pueda descubrir y poner en marcha dentro del ecosistema de Google Home. Para habilitar la publicidad de manera temporal (durante 15 minutos, según la especificación de Matter), presiona el botón USERINTERFACE.
  2. Sin un módulo de acelerador de hardware criptográfico, es posible que la placa de desarrollo de K32 no pueda completar la puesta en marcha antes de que se agote el tiempo de espera del flujo desde la Android mobile device side. You can identify that a timeout occurred by using adb logcat from a computer attached to your phone. When a timeout occurs, you will see a log message like:

    Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout
    .

    Consulta Solución de problemas para obtener más información sobre cómo configurar y usar adb.

Próximos pasos

Cuando se haya creado correctamente tu ejemplo Matter, crea un proyecto de desarrollador.