NXP

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 instalado Python3 y estos paquetes. Los pasos de este documento se validaron con Python 3.8.
  2. Descarga y, luego, instala el SDK de MCUXpresso 2.6.9 de K32W061.
  3. Una vez compilado el SDK, descarga el paquete del SDK y extráelo en tu directorio principal. Establece la variable de entorno NXP_K32W0_SDK_ROOT en la que extrajiste el SDK. También te recomendamos agregar este comando al archivo .*rc para la shell que usas, como .zshrc:
    export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
  4. Clona e inicializa el repositorio de 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 de interruptor genérico”. Asegúrate de que los puentes JP4/JP7 estén ubicados en la posición más a la izquierda (LPC-JN UART0):
    imagen

  1. Descarga y, luego, 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 tu computadora con un cable mini USB.
    imagen
  3. Descarga y, luego, instala LPCScrypt en tu computadora.
    1. En macOS, haz 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é instalado, ejecuta esta secuencia de comandos para volver a programar la 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 BOOT a NORMAL. Tu placa ahora está reconfigurada para usar JLink y escribir en la memoria flash una imagen.
    imagen

Compila la imagen

  1. Prepara el repositorio:
    source ./scripts/activate.sh
  2. Instala las dependencias:

    pip3 install pycrypto pycryptodome

  3. Actualiza el VENDOR_ID en la configuración de tu proyecto de ejemplo (CHIPProjectConfig.h). Este debe ser tu VID de acuerdo con la especificación Matter o un VID asignado con fines de prueba. El valor que proporcionas para VENDOR_ID debe coincidir con el que usas cuando creas la integración Matter en la 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
1. Verifica el `PRODUCT_ID` en la configuración de tu proyecto de ejemplo (`CHIPProjectConfig.h`). El valor de `PRODUCT_ID` puede seguir siendo el mismo que el predeterminado del ejemplo o puede cambiarse según lo desees, pero debe cumplir con las [restricciones de ID del producto actuales que se describen en los requisitos previos](/matter/get-started#product_id). 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](/matter/integration/create) 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
1. Compila la app de iluminación: 1. **Si la placa de expansión OM15082 está conectada a la 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
1. **Si no se adjunta la placa de expansión OM15082**, 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 Pigweed](https://pigweed.dev/pw_tokenizer){:target="_blank" .external}, que es un parámetro de configuración de pigweed “chip_with_OM15082” que permite generar un hash de las secuencias de comandos “pigchiptoken” que se encuentra habilitado para el hash_token anterior a fin de reducir en gran medida el hash de las secuencias de comandos “pigchiptoken”. Consulta [aquí](https://github.com/project-chip/connectedhomeip/tree/v1.0-branch/examples/lighting-app/nxp/k32w/k32w0#pigweed-tokenizer){:target="_blank" .external} para obtener más información. 1. **Para usuarios de macOS** (omite este paso si NO compilas 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"
1. Corrige el argumento de la utilidad `file` ("`-ib\" debería ser "`-Ib"), ya que, de lo contrario, la secuencia de comandos de firma no generará, de manera silenciosa, un archivo `.bin`:
MIME_SET="$(file -ib $FILENAME)"
Cámbiate a:
MIME_SET="$(file -Ib $FILENAME)"
1. 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/

Escribe en la memoria flash de la pizarra

  1. Inicia la línea de comandos de JLink con la placa conectada mediante un cable mini USB:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  2. En la línea de comandos de JLink, ingresa el comando erase para borrar una imagen existente en la placa. Esto es necesario si actualizaste la placa anteriormente.
    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, escribe la imagen en la memoria flash 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. Para salir de la CLI de JLink, escribe exit.
  5. Reinicia 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 a fin de 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 en serie USB en tu computadora. Puedes buscarla en /dev/:
    ls -la /dev/tty*
    Puedes abrir la consola en serie con la secuencia de comandos detokenizer.py de python3, que es una secuencia de comandos que decodifica los registros con asignación de token de Pigweed desde 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 activar o desactivar el LED D3.

Requisitos previos de la comisión

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

  1. Se debe habilitar la publicidad de BLE antes de que se pueda descubrir y poner en marcha el dispositivo en el ecosistema de Google Home. Para habilitar la publicidad de forma temporal (durante 15 minutos, según la especificación Matter), presiona el botón USERINTERFACE.
  2. Sin un módulo de aceleración de hardware criptográfico, es posible que la placa de desarrollo K32 no pueda completar la puesta en marcha antes de que se agote el tiempo de espera del flujo desde el lado del dispositivo móvil Android. Puedes identificar que se agotó el tiempo de espera usando adb logcat desde una computadora conectada al teléfono. Cuando se agote el tiempo de espera, verás un mensaje de registro como el siguiente:

    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 la configuración y el uso de adb.

Próximos pasos

Una vez que se haya compilado correctamente tu ejemplo de Matter, crea un proyecto de desarrollador.