{"id":1574,"date":"2022-05-16T22:48:58","date_gmt":"2022-05-16T22:48:58","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=1574"},"modified":"2024-09-04T15:06:55","modified_gmt":"2024-09-04T15:06:55","slug":"actualizar-firmware-modulo-zigbee","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/actualizar-firmware-modulo-zigbee\/","title":{"rendered":"Actualizar firmware m\u00f3dulo Zigbee"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Si bien la mayor\u00eda de <a href=\"https:\/\/www.zigbee2mqtt.io\/guide\/adapters\/#recommended\" data-type=\"URL\" data-id=\"https:\/\/www.zigbee2mqtt.io\/guide\/adapters\/#recommended\" target=\"_blank\" rel=\"noreferrer noopener\">controladores compatibles con Zigbee2MQTT<\/a> son para USB, tambi\u00e9n podemos utilizar conexi\u00f3n de red por cable, en este caso el coordinador <a rel=\"noreferrer noopener\" href=\"https:\/\/www.tubeszb.com\/product\/cc2652_poe_coordinator\/47?cp=true&amp;sa=false&amp;sbp=false&amp;q=false&amp;category_id=2\" data-type=\"URL\" data-id=\"https:\/\/www.tubeszb.com\/product\/cc2652_poe_coordinator\/47?cp=true&amp;sa=false&amp;sbp=false&amp;q=false&amp;category_id=2\" target=\"_blank\">CC2652P2 Zigbee PoE<\/a>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a actualizar desde Windows por lo que necesitaremos tener instalado <a rel=\"noreferrer noopener\" href=\"https:\/\/www.python.org\/downloads\/windows\/\" data-type=\"URL\" data-id=\"https:\/\/www.python.org\/downloads\/windows\/\" target=\"_blank\">Python<\/a> y descargar el <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/JelmerT\/cc2538-bsl\" data-type=\"URL\" data-id=\"https:\/\/github.com\/JelmerT\/cc2538-bsl\" target=\"_blank\">script de JelmerT<\/a> para <a href=\"https:\/\/www.ti.com\/lit\/pdf\/swra466\" data-type=\"URL\" data-id=\"https:\/\/www.ti.com\/lit\/pdf\/swra466\" target=\"_blank\" rel=\"noreferrer noopener\">Texas Instruments CC2538, CC26xx y CC13xx<\/a> SoCs (System on Chips). Lo primero ser\u00e1 instalar las dependencias para ejecutar el script, desde la l\u00ednea de comandos:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip install pyserial\npip install intelhex\n<\/pre><\/div>\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">NOTA: este modelo nos permite operar por red IP m\u00e1s c\u00f3modamente y en remoto, para los dispositivo USB es necesario tener un conversor serial-USB<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descargamos el firmware correspondiente a nuestro modelo desde el <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/Koenkk\/Z-Stack-firmware\/tree\/master\/coordinator\/Z-Stack_3.x.0\/bin\" data-type=\"URL\" data-id=\"https:\/\/github.com\/Koenkk\/Z-Stack-firmware\/tree\/master\/coordinator\/Z-Stack_3.x.0\/bin\" target=\"_blank\">repositorio de Koenkk<\/a>, utilizar un archivo incorrecto puede dejar inservible el dispositivo, en nuestro caso <a href=\"https:\/\/github.com\/Koenkk\/Z-Stack-firmware\/blob\/master\/coordinator\/Z-Stack_3.x.0\/bin\/CC1352P2_CC2652P_launchpad_coordinator_20220219.zip\">CC1352P2_CC2652P_launchpad_coordinator_20220219.zip<\/a>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tenemos en el mismo directorio el script de Python <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/JelmerT\/cc2538-bsl\/blob\/master\/cc2538-bsl.py\" data-type=\"URL\" data-id=\"https:\/\/github.com\/JelmerT\/cc2538-bsl\/blob\/master\/cc2538-bsl.py\" target=\"_blank\">cc2538-bsl.py<\/a> y el archivo .hex con el firmware correspondiente. Debemos iniciar el en modo BSL (serial boot loader \/ bootstrap loader \/ boot loader), accedemos a la direcci\u00f3n IP de nuestro dispositivo (es recomendable establecer IP fija o una reserva en el DHCP); pulsamos en \u00abPrep the cc2652 form firmware update\u00bb lo que realmente realizar\u00e1 una pulsaci\u00f3n de zBSL y a continuaci\u00f3n otra de zRST con una cierta demora.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2022\/Zigbee\/tubeszb_cc2562_poe_web_server.jpg\" alt=\"\" class=\"wp-image-1577\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Si este m\u00e9todo no funciona, el propio dispositivo tiene un bot\u00f3n BSL que deberemos mantener pulsado durante 10 segundos mientras conectamos la corriente (en este caso al ser PoE el cable de red), importante tener ya pulsado el bot\u00f3n antes de encenderlo; de este modo, forzamos a entrar en el modo de carga de arranque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el dispositivo en este estado ejecutamos el comando sobre nuestra IP (en este ejemplo 10.0.0.10):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ncc2538-bsl.py -p socket:\/\/10.0.0.10:6638 -evw .\/CC1352P2_CC2652P_launchpad_coordinator_20220219.hex\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Los par\u00e1metros que aplicamos al script elimina, escribe y verifica ([e]rase+[v]erify+[w]rite) el firmware.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"868\" height=\"246\" src=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2022\/Zigbee\/JelmerT_cc2538_bsl.jpg\" alt=\"\" class=\"wp-image-1576\" srcset=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2022\/Zigbee\/JelmerT_cc2538_bsl.jpg 868w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2022\/Zigbee\/JelmerT_cc2538_bsl-300x85.jpg 300w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2022\/Zigbee\/JelmerT_cc2538_bsl-768x218.jpg 768w\" sizes=\"auto, (max-width: 868px) 100vw, 868px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">En el caso de aparecer el error: \u00abTimeout waiting ACK\/NACK after \u201cget Status (0x23)\u00bb y no completarse la carga, o bien el dispositivo no ha entrado en modo BSL o existe alg\u00fan problema con los sockets abiertos en Windows, reinicia el ordenador para asegurarte que no existe ning\u00fan conflicto con otras aplicaciones y vuelve a iniciar el proceso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para hacerlo mediante USB, debemos conocer el puerto COM detectado por el sistema operativo, para Windows por ejemplo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ncc2538-bsl.py -ewv -p COM4 --bootloader-sonoff-usb .\/CC1352P2_CC2652P_launchpad_coordinator_20240710.hex\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">NOTA: si al instalar python no est\u00e1 dentro del PATH de las aplicaciones o la ruta ha cambiado a\u00f1ade \u00abpython\u00bb antes del comando<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si bien la mayor\u00eda de controladores compatibles con Zigbee2MQTT son para USB, tambi\u00e9n podemos utilizar conexi\u00f3n de red por cable, en este caso el coordinador CC2652P2 Zigbee PoE. Vamos a actualizar desde Windows por lo que necesitaremos tener instalado Python y descargar el script de JelmerT para Texas Instruments CC2538, CC26xx y CC13xx SoCs (System [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1582,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[864],"tags":[876,875,874,873,877],"class_list":["post-1574","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domotica","tag-bsl","tag-cc2652p","tag-z-stack","tag-zigbee","tag-zigbee2mqtt"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/1574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/comments?post=1574"}],"version-history":[{"count":2,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/1574\/revisions"}],"predecessor-version":[{"id":2261,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/1574\/revisions\/2261"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media\/1582"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=1574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=1574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=1574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}