{"id":329,"date":"2010-06-14T21:53:35","date_gmt":"2010-06-14T20:53:35","guid":{"rendered":"http:\/\/www.zigbe.net\/?p=329"},"modified":"2010-06-14T21:53:35","modified_gmt":"2010-06-14T20:53:35","slug":"802-15-4-frames-vs-digi-api-frames-al-fin-lo-entiendo","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=329","title":{"rendered":"802.15.4 frames vs Digi API frames, Al fin lo entiendo!!!!!!"},"content":{"rendered":"<div class=\"mceTemp mceIEcenter\">\n<div class=\"mceTemp mceIEcenter\">\u00a0<\/div>\n<\/div>\n<p>Probablemente lo que explico en este art\u00edculo ser\u00e1 tratado por muchas personas como una obviedad, es uno de esos temas en los que est\u00e1s atascado durante varios d\u00edas. Al final, siempre, cuando encuentras la soluci\u00f3n era evidente.<\/p>\n<p>El caso es que como os contaba logr\u00e9 poner en marcha el AVR Studio con el AZ Raven de Atmel, a la primera, pod\u00eda ver los paquetes de la red. El d\u00eda que lo puse en marcha me content\u00e9 con ver la actividad en la red, l\u00edneas de texto de colores con direcci\u00f3nes de origen, de destino y payloads.<\/p>\n<p>Como ya coment\u00e9 estamos intentando hacer cosas con los m\u00f3dulos de Digi, me he leido cientos y cientos de p\u00e1ginas de informaci\u00f3n t\u00e9cnica de sus m\u00f3dulos, hab\u00eda llegado incluso a entender su API y casi a memorizar el formato de sus frames.<\/p>\n<p>En el AVR studio el formato del frame que le\u00eda de la red Zigbee segu\u00eda el siguiente esquema:<\/p>\n<div id=\"attachment_330\" style=\"width: 450px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/IEEE-Frame.gif\"><img aria-describedby=\"caption-attachment-330\" loading=\"lazy\" class=\"size-full wp-image-330\" title=\"IEEE Frame\" src=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/IEEE-Frame.gif\" alt=\"\" width=\"440\" height=\"232\" \/><\/a><p id=\"caption-attachment-330\" class=\"wp-caption-text\">Formato de Frame IEEE 802.15.4<\/p><\/div>\n<p>Basicamente le\u00eda los datos de la MAC sublayer, el frame control, el n\u00famero de secuencia, la Address info (red de origen, nodo de origen, red de destino, nodo de destino) y el Payload (una colecci\u00f3n de bytes en hexadecimal no interpretable por seres humanos). Todos los frames de MAC que no llevan payload son perfectamente interpretables, de eso se encarga el AVR Studio, agrupando los bytes en columnas, pint\u00e1ndolod de diferentes colores, etc.<\/p>\n<p>Mi problema vino a la hora de interpretar el payload, esperaba que fuera un fragmento del XBee API frame, este fu\u00e9 mi gran error, suponer que el Frame del APi de Xbee ten\u00eda algo que ver con lo que viajaba por el aire, el formato es el siguiente:<\/p>\n<div id=\"attachment_331\" style=\"width: 569px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/Digi-API-FRame.jpg\"><img aria-describedby=\"caption-attachment-331\" loading=\"lazy\" class=\"size-full wp-image-331\" title=\"Digi API FRame\" src=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/Digi-API-FRame.jpg\" alt=\"\" width=\"559\" height=\"156\" srcset=\"https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/Digi-API-FRame.jpg 559w, https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/06\/Digi-API-FRame-300x84.jpg 300w\" sizes=\"(max-width: 559px) 100vw, 559px\" \/><\/a><p id=\"caption-attachment-331\" class=\"wp-caption-text\">Formato del XBee API frame<\/p><\/div>\n<p>\u00a0Si os fijais no tiene demasiado que ver, el API frame empieza por un car\u00e1cter fijo (la tilde), le sigue la longitud, El Frame data y un checksum.<\/p>\n<p>La conclusi\u00f3n es que tu en una radio de Digi que forme parte de una red le\u00a0env\u00edas el API frame por la UART, la radio de Digi lo convierte internamente en un Frame 802.15.4 y lo lanza por el aire, otra radio de Digi en la misma red lee el frame 802.15.4 y (si tiene que sacarlo por la UART), lo saca en el formato de la API de Digi.<\/p>\n<p>Todo esto est\u00e1 muy bien para los comandos propios del fabricante, para la interoperabilidad con otros fabricantes el secreto parece estar en\u00a0el Explicit Transmit API Frame (0x11), que es el tipo de frame con el que se env\u00edan los comandos ZCL, los de los perfiles p\u00fablicos, etc.<\/p>\n<p>A\u00fan as\u00ed me gustar\u00eda conocer la transformaci\u00f3n que se\u00a0hace el microprocesador de la radio para convertir un Explicit Transmit API Frame en el paquete 802.15.4, trabajando con dispositivos de Digi\u00a0\u00a0en ambos extremos no es necesario, porque el dispositivo de destino se encarga de hacer la transpormaci\u00f3n inversa, por lo que lo que llega es predecible, pero \u00bfqu\u00e9 pasa si el coordinador no lleva una radio de Digi?<\/p>\n<p>En todo caso me siento liberado solo por haber deducido lo que pasa aunque no tenga la soluci\u00f3n al 100%, incluso siendo consciente de que todo esto es una pura deducci\u00f3n, agradecer\u00e9 a cualquier persona que me corrija o que me confirme.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 Probablemente lo que explico en este art\u00edculo ser\u00e1 tratado por muchas personas como una obviedad, es uno de esos temas en los que est\u00e1s atascado durante varios d\u00edas. Al final, siempre, cuando encuentras la soluci\u00f3n era evidente. El caso&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=329\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[15,2,7,23,11],"tags":[26,27,37,56,153,168,178],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/329"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=329"}],"version-history":[{"count":0,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/329\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}