{"id":31101,"date":"2019-10-31T21:39:28","date_gmt":"2019-10-31T18:39:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe\/"},"modified":"2019-10-31T21:39:28","modified_gmt":"2019-10-31T18:39:28","slug":"pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe","title":{"rendered":"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)\" src=\"\/wp-content\/uploads\/2019\/04\/c3c47048a601bcd0a79b44535de2f36f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTudo come\u00e7ou com a compra, pelo autor, de um interessante dispositivo no mercado de usados \u2014 Smart Response XE (<noindex><a rel=\"nofollow\" href=\"http:\/\/downloads.smarttech.com\/media\/sitecore\/en\/support\/product\/smartresponse\/smartresponsexe\/specsheets\/specsresponsexev18mar13.pdf\">uma breve descri\u00e7\u00e3o<\/a><\/noindex>). Foi projetado para escolas: cada aluno na sala de aula recebe um dispositivo semelhante a um caderno eletr\u00f4nico ou um tradutor dos anos 90, o professor faz uma pergunta e os alunos digitam suas respostas nos teclados dos dispositivos, que s\u00e3o transmitidas via r\u00e1dio (802.15.4) para um receptor conectado ao PC do professor.<\/p>\n<p>O suporte para esses dispositivos foi encerrado h\u00e1 v\u00e1rios anos, e o que as escolas compravam por 100-200 d\u00f3lares cada, agora aparece no eBay por 10 d\u00f3lares ou menos. O \"hardware\" \u00e9 realmente muito adequado para experi\u00eancias de entusiastas:<\/p>\n<ul>\n<li>teclado de 60 teclas<\/li>\n<li>display com resolu\u00e7\u00e3o de 384\u00d7136, 2 bits por pixel \u2014 semelhante ao B\u041a, CGA, mas 4 n\u00e3o s\u00e3o cores, e sim grada\u00e7\u00f5es de brilho<\/li>\n<li>microcontrolador ATmega128RFA1 (128 kB de mem\u00f3ria flash, 4 kB de EEPROM, 16 kB de RAM, transceptor padr\u00e3o 802.15.4)<\/li>\n<li>mem\u00f3ria flash externa (em rela\u00e7\u00e3o ao microcontrolador, e n\u00e3o ao dispositivo inteiro) de 1 megabit (128 kilobytes) com interface SPI<\/li>\n<li>compartimento para 4 pilhas AAA.<\/li>\n<\/ul>\n<p>\nPelo nome do microcontrolador, \u00e9 claro que ele pertence \u00e0 fam\u00edlia AVR, portanto, tornar um dispositivo compat\u00edvel com Arduino \u00e9 uma tarefa mais do que trivial\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Da not\u00edcia em <noindex><a rel=\"nofollow\" href=\"https:\/\/hackaday.com\/2018\/07\/22\/classroom-gadget-turned-arduino-compatible\/\">Hackaday<\/a><\/noindex> o autor descobriu que isso <noindex><a rel=\"nofollow\" href=\"https:\/\/community.arduboy.com\/t\/smart-response-xe-re-purposed-into-arduboy\/6094\/\">j\u00e1 foi feito<\/a><\/noindex> (na mesma liga\u00e7\u00e3o \u00e9 explicado onde conectar), permitindo executar jogos para Arduboy:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"6VqPGFtIT8Q\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/6VqPGFtIT8Q\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n Mas o que o autor mais interessa \u00e9 a possibilidade de n\u00e3o apenas jogar no dispositivo, mas estudar:<\/p>\n<ul>\n<li>mem\u00f3ria flash com interface serial SPI<\/li>\n<li>carregadores para AVR<\/li>\n<li>padr\u00e3o 802.15.4<\/li>\n<\/ul>\n<p>\nO autor come\u00e7ou escrevendo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitbank2\/SmartResponseXE\">uma biblioteca<\/a><\/noindex> (GPL v3), que permite inicializar a tela, exibir texto e ret\u00e2ngulos, bem como acessar a mem\u00f3ria flash com interface SPI. Em seguida, ele come\u00e7ou a pensar em ideias pr\u00e1ticas de uso do dispositivo: terminal port\u00e1til compat\u00edvel com VT-100, jogos multijogador. Depois de modificar tr\u00eas dispositivos, decidiu \"ensinar\" eles a receber sketches \"sem fio\". O que seria n\u00e3o apenas interessante, mas tamb\u00e9m muito conveniente: abrir o corpo do dispositivo a cada vez \u00e9 dif\u00edcil, e sob a tampa do compartimento da bateria s\u00f3 existem orif\u00edcios que permitem conectar um programador JTAG \u00e0 placa.<\/p>\n<p><img decoding=\"async\" alt=\"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)\" src=\"\/wp-content\/uploads\/2019\/04\/eb928013737c34e50e6a49e7d41d5bd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsso \u00e9 suficiente para gravar o bootloader do Arduino, mas n\u00e3o o sketch \u2014 a porta serial n\u00e3o est\u00e1 dispon\u00edvel, portanto, n\u00e3o tem como evitar a abertura do corpo. Al\u00e9m disso, as linhas TX0 e RX0 da primeira porta serial est\u00e3o combinadas com as linhas de leitura da matriz do teclado, ou seja, aquelas que fazem a leitura das teclas funcionais ao lado do display. Mas o que fazer \u2014 o autor fez o seguinte:<\/p>\n<p><img decoding=\"async\" alt=\"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)\" src=\"\/wp-content\/uploads\/2019\/04\/8989f4057806b83ff2eb11b6f1ed2d57.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEle conectou as linhas JTAG, e agora n\u00e3o \u00e9 necess\u00e1rio abrir o compartimento das baterias. E para que seja poss\u00edvel carregar tamb\u00e9m os sketches, ele adicionou ambos os ports seriais a esse mesmo conector, incluindo tamb\u00e9m um interruptor, pois com as baterias instaladas, n\u00e3o h\u00e1 como desligar o dispositivo fisicamente de outra forma.<\/p>\n<p>Levei bastante tempo trabalhando com o soldador, estilete e pistola de cola. Enfim, gravar os sketches via wireless \u00e9 muito mais conveniente, preciso inventar algo rapidamente para isso.<\/p>\n<p>O Arduino IDE usa o programa <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ladyada.net\/learn\/avr\/avrdude.html\">avrdude<\/a><\/noindex>. Ele se comunica com o microcontrolador atrav\u00e9s do protocolo <noindex><a rel=\"nofollow\" href=\"http:\/\/www.tuxgraphics.org\/common\/src2\/article05101\/stk500_spec_AVR068.pdf\">STK500<\/a><\/noindex>, que permite a transfer\u00eancia de arquivos em ambas as dire\u00e7\u00f5es. Ele \u00e9 mal compat\u00edvel com canais onde h\u00e1 poss\u00edveis atrasos vari\u00e1veis, distor\u00e7\u00e3o e perda de dados. Se algo falha ou barulha no canal serial, voc\u00ea pode enlouquecer tentando descobrir a causa. Uma vez, o autor trabalhou por meio dia at\u00e9 entender que o problema estava em um cabo ruim, al\u00e9m de um caprichoso conversor de interface CP2102. At\u00e9 mesmo um microcontrolador com um conversor de interface embutido, como o ATmega32u4, pode \u00e0s vezes ter essas \u201cmanha\u201d. Todo usu\u00e1rio do Arduino j\u00e1 percebeu que erros ao carregar sketches n\u00e3o s\u00e3o t\u00e3o raros. \u00c0s vezes, a grava\u00e7\u00e3o ocorre normalmente, mas ao fazer a leitura de verifica\u00e7\u00e3o, um erro \u00e9 encontrado. Isso n\u00e3o significa que houve um erro durante a grava\u00e7\u00e3o \u2014 a falha ocorreu durante a leitura. Agora imagine que ao operar \u201csem fio\u201d isso aconte\u00e7a, mas muito mais frequentemente.<\/p>\n<p>Ap\u00f3s experimentar diferentes maneiras de resolver esse problema, o autor concebeu o seguinte. O dispositivo possui uma mem\u00f3ria flash de 128 kilobytes com interface SPI \u2014 recebendo dados atrav\u00e9s de fios (lembrando que j\u00e1 h\u00e1 um dispositivo com um conector lateral com o autor), usamos essa mem\u00f3ria como um buffer, e enviamos os dados por meio de um canal de r\u00e1dio para outro dispositivo. Essa \u00e9 uma sauda\u00e7\u00e3o da Cybiko.<\/p>\n<p>Ap\u00f3s escrever o c\u00f3digo para trabalhar com o canal de r\u00e1dio, bem como a fonte, o carregador se tornou maior que 4 kilobytes. Portanto, o valor de HFUSE teve que ser alterado de 0xDA para 0xD8. Agora, o carregador pode ter at\u00e9 8 kilobytes de comprimento, e o endere\u00e7o inicial \u00e9 igual a 0x1E000. Isso est\u00e1 refletido no Makefile, mas deve ser considerado tamb\u00e9m ao carregar. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.arduino.cc\/en\/Hacking\/Bootloader?from=Tutorial.Bootloader\">carregador<\/a><\/noindex> com avrdude.<\/p>\n<p>O transceptor padr\u00e3o 802.15.4 no ATmega128RFA1 \u00e9 originalmente projetado para operar sob o protocolo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.zigbee.org\/what-is-zigbee\/\">ZigBee<\/a><\/noindex>, que \u00e9 bastante complexo, portanto, o autor decidiu, ao inv\u00e9s disso, simplesmente transmitir pacotes. Isso \u00e9 implementado no ATmega128RFA1 de forma hardware, ent\u00e3o o c\u00f3digo exigido \u00e9 pouco. Al\u00e9m disso, para simplificar, o autor decidiu usar um canal fixo, n\u00e3o permitindo at\u00e9 mesmo uma sele\u00e7\u00e3o manual. O padr\u00e3o 802.15.4 suporta 16 canais numerados de 11 a 26. Eles est\u00e3o bastante congestionados, alguns tamb\u00e9m sobrep\u00f5em os canais WiFi (os canais ZigBee est\u00e3o marcados em vermelho, e os WiFi em azul, verde e amarelo).<\/p>\n<p><img decoding=\"async\" alt=\"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)\" src=\"\/wp-content\/uploads\/2019\/04\/650166fdb8e1d0361d015e4c2e85d7f1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDescobriu-se que os canais 15 e 26 s\u00e3o os menos suscet\u00edveis a interfer\u00eancias de WiFi. O segundo foi o escolhido pelo autor. Aviso: o tradutor n\u00e3o sabe se \u00e9 permitido simplificar assim o ZigBee. Talvez valha a pena programar um pouco mais e implement\u00e1-lo totalmente?<\/p>\n<p>No primeiro dos dispositivos, \u00e9 necess\u00e1rio implementar uma m\u00e1quina de estados que transmita dados atrav\u00e9s do protocolo STK500. Na maior parte, as mensagens transmitidas e recebidas s\u00e3o autossuficientes, mas algumas est\u00e3o ligadas a mensagens que passaram anteriormente pelo canal. A descri\u00e7\u00e3o do di\u00e1logo \u00e9 fornecida. <noindex><a rel=\"nofollow\" href=\"http:\/\/baldwisdom.com\/bootloading\/\">aqui<\/a><\/noindex>.<\/p>\n<p>Um aspecto importante desse di\u00e1logo \u00e9 a transmiss\u00e3o de pacotes destinados \u00e0 grava\u00e7\u00e3o na mem\u00f3ria flash do dispositivo de destino. Em microcontroladores simples da fam\u00edlia AVR, o tamanho da p\u00e1gina \u00e9 de 128 bytes, mas no ATmega128RFA1, ele \u00e9 de 256. E a mem\u00f3ria flash que se conecta via protocolo SPI possui o mesmo tamanho. Quando o programa no primeiro dispositivo est\u00e1 carregando o sketch, ele n\u00e3o o envia imediatamente para o segundo, mas escreve na mem\u00f3ria. Quando a IDE do Arduino verifica a corre\u00e7\u00e3o da grava\u00e7\u00e3o, \u00e9 enviado o que foi gravado. Agora, \u00e9 necess\u00e1rio transmitir os dados recebidos pelo canal de r\u00e1dio para o segundo dispositivo. Nesse processo, a altern\u00e2ncia entre receber e transmitir acontece com bastante frequ\u00eancia. O protocolo STK500 \u00e9 indiferente a atrasos, mas n\u00e3o tolera perda de dados (estranhamente, foi mencionado que os atrasos na transmiss\u00e3o de dados tamb\u00e9m t\u00eam impacto). E perdas na transmiss\u00e3o sem fio s\u00e3o inevit\u00e1veis. O ATmega128RFA1 tem uma implementa\u00e7\u00e3o de hardware para solicitar retransmiss\u00f5es em caso de d\u00favidas sobre a corre\u00e7\u00e3o da transmiss\u00e3o, mas o autor decidiu implementar isso programaticamente por conta pr\u00f3pria. Ele desenvolveu um protocolo em que um lado transmite muito mais dados do que o outro.<\/p>\n<p>Ele n\u00e3o \u00e9 perfeito, mas tudo funciona. A p\u00e1gina de 256 bytes \u00e9 dividida em quatro segmentos, cada um dos quais \u00e9 enviado pelo canal de r\u00e1dio na forma de pacotes. Um pacote cont\u00e9m at\u00e9 125 bytes de dados mais um byte para o comprimento e dois para CRC. Assim, fragmentos de 64 bytes junto com os n\u00fameros das p\u00e1ginas e segmentos (de 0 a 3) s\u00e3o colocados l\u00e1. No dispositivo receptor, existe uma vari\u00e1vel que permite rastrear quantos segmentos foram recebidos, e quando todos os quatro chegam, uma confirma\u00e7\u00e3o \u00e9 enviada para o dispositivo transmissor, indicando que a p\u00e1gina inteira foi recebida. Se n\u00e3o houver confirma\u00e7\u00e3o (se o CRC n\u00e3o combinar), a p\u00e1gina inteira \u00e9 enviada novamente. A velocidade, nesse caso, \u00e9 at\u00e9 maior do que na transmiss\u00e3o por cabo. Veja:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"d-ObUCnRmQU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/d-ObUCnRmQU\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nMas, na verdade, seria bom prever uma maneira pr\u00e1tica de conectar um cabo aos dispositivos para carregar os sketches por essa via. Por exemplo, colocar um conversor de interface CP2102 como na foto dentro do dispositivo e col\u00e1-lo na placa de modo que suporte a for\u00e7a ao conectar e desconectar o cabo Micro USB.<\/p>\n<p><img decoding=\"async\" alt=\"Estamos escrevendo um carregador OTA para o ATmega128RFA1 (como parte do dispositivo Smart Response XE)\" src=\"\/wp-content\/uploads\/2019\/04\/e03563fcd985467abb236475cbbf9e3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl\u00e9m disso, h\u00e1 um regulador de 3,3 volts (e como utiliz\u00e1-lo em um dispositivo com alimenta\u00e7\u00e3o de 6 volts \u2014 a menos que haja um regulador semelhante, e seja poss\u00edvel adicionar dois diodos para escolher automaticamente de qual deles o dispositivo ser\u00e1 alimentado). Deve-se remover todos os tr\u00eas LEDs da placa do conversor de interface, caso contr\u00e1rio, eles sobrecarregar\u00e3o as baterias ao serem utilizados, al\u00e9m de interferirem na leitura do teclado e no funcionamento da mem\u00f3ria flash com interface SPI.<\/p>\n<p>A busca pelo objetivo acabou sendo at\u00e9 mais interessante do que alcan\u00e7\u00e1-lo (e n\u00e3o precisamos daquela piada sobre o \u00f4nibus). O autor aprendeu muito sobre bootloaders para AVR, mem\u00f3ria flash com interface SPI, protocolo STK500 e o padr\u00e3o 802.15.4.<\/p>\n<p>Todo o resto do c\u00f3digo, al\u00e9m da biblioteca descrita acima \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bitbank2\/SMART_bootloader\">aqui<\/a><\/noindex>, e ele tamb\u00e9m est\u00e1 sob GPL v3. O Twitter do autor \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/fast_code_r_us\">aqui<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/447026\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u043c \u0440\u044b\u043d\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u2014 Smart Response XE (\u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435). \u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u043e\u043d\u043e \u0434\u043b\u044f \u0448\u043a\u043e\u043b: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0435\u043d\u0438\u043a \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0443, \u043f\u043e\u0445\u043e\u0436\u0435\u043c\u0443 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u043d\u0443\u044e \u043a\u043d\u0438\u0436\u043a\u0443 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0434\u0435\u0432\u044f\u043d\u043e\u0441\u0442\u044b\u0445, \u0443\u0447\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u0438 \u0443\u0447\u0435\u043d\u0438\u043a\u0438 \u043d\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0442\u0432\u0435\u0442\u044b, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043f\u043e \u0440\u0430\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b\u0443 (802.15.4) \u0432 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0439 \u043a \u0443\u0447\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u041f\u041a. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23069,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31101","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0438\u0448\u0435\u043c OTA-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f ATmega128RFA1 (\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Smart Response XE) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:39:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Escrevendo um bootloader OTA para ATmega128RFA1 (como parte do dispositivo Smart Response XE) | ProHoster","description":"Tudo come\u00e7ou.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0438\u0448\u0435\u043c OTA-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f ATmega128RFA1 (\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Smart Response XE) | ProHoster","og:description":"\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/pishem-ota-zagruzchik-dlya-atmega128rfa1-v-sostave-ustrojstva-smart-response-xe","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:39:28+00:00","article:modified_time":"2019-10-31T18:39:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31101","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 04:31:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:22:35","updated":"2026-01-21 04:31:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/31101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=31101"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/31101\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/23069"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=31101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=31101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=31101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}