Установка платы STM32F103CBT6 (Maple Mini)

Фил 333
Пн 16 января 2017 г. 15:48
Привет, ребята,

Я купил плату STM32F103CBT6 от aliexpress Потому что я нашел его при быстром поиске, чтобы быть совместимым с Arduino.

Когда он прибыл, я следовал за всем Rogers Redions В моем ПК win7 x64.

После этого я выбрал в Arduino IDE плату «Generic STM32F103C Series», как вариант «STM32F103CB», изменил частоту ЦП и метод загрузки для всех случаев.
Я попытался загрузить только с USB-кабелем (адаптер FTDI не связан, потому что некоторые инструкции, которые я нашел, с тем, что не сработало)

Я всегда получал ошибку:
===========================
Не удалось.
STM32Flash 0.4

http: // stm32flash.Googlecode.ком/

Использование анализатора: необработанный двоичный файл
Интерфейс serial_w32: 230400 8e1
===========================

Как порт, я выбрал что -то вроде «com32 (кленовый сериал)» - я не уверен, как это было точно вызвано.

После того, как я нашел кого -то с аналогичной проблемой, и ему дали совет, чтобы выбрать «Maple (Rev 3)» в качестве доски, я попробовал это.
Он собрал и загрузил эскиз (мигание) на доску, и он сработал.

Но: с тех пор порт (COM32 (кленовый сериал)) исчез, и у меня нет возможности сделать какую -либо последовательную связь с платой через серийный монитор Arduino IDE.
Я также нашел это «устройство» (что -то с Maple или DFU) в диспетчете оборудования моего ПК с Windows.
Теперь я больше ничего не вижу.

Я все еще могу загрузить наброски, но в IDE нет порта, выбранного в IDE.
Кажется, он выбрал «скрытый» порт, который я не могу найти, а не общаться с.

Если я загрузил еще один набросок мигания, я получу:
===========================
Maple_Loader v0.1
Сброс в загрузчик через DTR Pulse
Сброс через USB -сериал! Вы выбрали правильный последовательный порт?
Поиск устройства DFU [1EAF: 0003]...
Предполагая, что плата находится в режиме вечного загрузчика и продолжает пытаться программировать DFU...
===========================

Он останавливается здесь, и мне нужно вручную нажать кнопку перезагрузки на доске. Тогда это продолжает с:
===========================
Нашел это!

Открытие устройства USB 0x1eaf: 0x0003...
Найдено время выполнения: [0x1eaf: 0x0003] devnum = 1, cfg = 0, intf = 0, alt = 1, name = "DFU Program Flash 0x08005000"
Настройка конфигурации 1...
Заявление USB DFU интерфейс...
Настройка альтернативной настройки ...
Определение статуса устройства: состояние = dfuidle, status = 0
Dfuidle, продолжая
Размер передачи = 0x0400
bytes_per_hash = 258
Starting download: [############################################## ####] закончил!
Сброс ошибки после загрузки: USB_RESET: не удалось сбросить устройство, WIN Ошибка: DAS SYSTEM KANN DIE ANGEGEN DATEI NICHT FINDEN.


состояние (8) = dfumanifest-wait-reset, status (0) = Условие ошибки не присутствует
Сделанный!
Сброс USB для переключения обратно в режим времени выполнения
===========================

Можете ли вы сказать мне, что я делаю неправильно и что я могу сделать, чтобы получить и серийное общение, работающее для отладки и так далее?

Большое спасибо!

Даниэфф
Пн 16 января 2017 г. 16:04
Эта доска - Maple Mini http: // wiki.STM32duino.com/index.PHP?title = maple_mini , Так что, возможно, выбрав это в меню «Доски», решит вашу проблему.

Фил 333
Пн 16 января 2017 г. 16:32
Большое спасибо, Даниэфф!!

Это работало с 72 МГц и оригинальным загрузчиком, чтобы снова показать Com -порт (COM32 (Maple Mini).

Что такое 48 МГц (медленный - с USB) и Booloader для?
Я также прошил 72 МГц также с USB.

После прошивки, я не могу прошить загрузчик 2.0 эскиза.

Я получаю это сообщение:
=================================================
Maple_Loader v0.1
Сброс в загрузчик через DTR Pulse
Поиск устройства DFU [1EAF: 0003]...
Нашел это!
Невозможно установить альтернативный интерфейс: usb_set_altinterface: не удалось установить интерфейс ALT 0/2: Ошибка выигрыша: ES Sind Keine Daten Mehr Verfügbar.



Открытие устройства USB 0x1eaf: 0x0003...
Найдено время выполнения: [0x1eaf: 0x0003] devnum = 1, cfg = 0, intf = 0, alt = 2, name = "undefined"
Настройка конфигурации 1...
Заявление USB DFU интерфейс...
Настройка альтернативной настройки ...
=================================================

Так что просто загрузите загрузчик, выбрав его в IDE, не работает?
Должен ли я тогда использовать этот эскиз и загрузите его через загрузчик «оригинал», а затем позвольте ему «обновить», используя серийные команды?
Или я уничтожу доску тогда : D

Даниэфф
Пн 16 января 2017 г., 17:07
Если вам не нужны дополнительные килобиты флэш -памяти, вам не нужно менять загрузчик. (То же самое с 48 МГц, сохраняет (маленькую) власть... Если бег от батареи.)

Фил 333
Пн, 16 января 2017 г. 18:30
3K памяти много ;)

Я попробовал и закончил:

********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

Предупреждение, обновление не удалось!! Эскиз перезагрузится через 3 секунды, и вы можете попытаться снова прошить




любые идеи? : D

Rogerclark
Пн, 16 января 2017 г. 20:53
Если у вас есть конвертер USB в серийный преобразователь, вы можете прошить загрузчик, используя это, вместо эскиза.

Но эскиз всегда работал на меня. Но, возможно, некоторые поставщики начали блокировать флэш -страницы загрузчика.

Ахулл
Пн, 16 января 2017 г. 11:44
Могу я спросить, название сообщения: «Re: Настройка STM32F104CBT6 Правление« Я прав, если бы это было на самом деле »103CBT6 Правление "?

Фил 333
Вт 17 января 2017 г. 13:40
@ahull: ты прав!
Это еще лучше должно было быть "настройка Maple Mini".

Я попробовал эскиз пару раз и всегда получаю одинаковую ошибку.

Я также опубликовал метод на этом сайте, Но STM32Flash.Exe просто выпускает окно CMD на 100 мс и не работает на моем ПК.

Я также скачал "STM’S собственный серийный загрузчик », который понравился Роджеру на этом сайте.
Я понятия не имел, как подключить его, поэтому я сначала подключил его через USB и попробовал с 115200 бод и даже паритетом, но Flash_Loader_demo_v2.8.0 дал мне сообщение «Нет ответа от цели».
Затем я помещаю плату в режим последовательного загрузчика, нажав и удерживая сброс и, но = 32, отпустить сброс, а затем выпустить, но = 32.
То же сообщение из инструмента.

Затем я подключился к USB<=>Серийный мост, как в блоге, который я опубликовал.
На обоих режимах и режиме последовательного загрузчика я получаю сообщения «Нет ответа от целевого».

Есть ли где -нибудь хорошее руководство, как прошивать загрузчик 2.0 ?

Стивестронг
Вт 17 января 2017 г. 14:42
Это должно работать, если вы точно следуете Шаги написаны здесь.
Обратите внимание, что на Maple Mini, помимо подключения Boot0 (PB8) к «Высокому», вы должны подключить PIN -код Boot1 (PB2) к GND, чтобы работать.
Видеть Здесь Maple Mini Pinout.
Кроме того, вам нужно открыть окно CMD (для выполнения исполняемого файла) в качестве администратора.

Ахулл
Вт 17 января 2017 г. 15:28
Rogerclark написал:Если у вас есть конвертер USB в серийный преобразователь, вы можете прошить загрузчик, используя это, вместо эскиза.

Но эскиз всегда работал на меня. Но, возможно, некоторые поставщики начали блокировать флэш -страницы загрузчика.

Бенджианселл
Вт 17 января 2017 г. 16:36
Phil333 написал:3K памяти много ;)

Я попробовал и закончил:

********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

Предупреждение, обновление не удалось!! Эскиз перезагрузится через 3 секунды, и вы можете попытаться снова прошить




любые идеи? : D

Ахулл
Вт 17 января 2017 г. 11:10
У меня была такая же проблема. Оказывается, продавец заблокировал флэш -страницу загрузчика загрузки.
Интересно, как легко было бы добавить инструкцию разблокировки в эскиз (Роджер?!)

Rogerclark
Вт 17 января 2017 г. 11:15
Привет, Энди

Я не писал эскиз обновления. Я думаю, возможно, @victor_pv написал это.

Я должен был добавить это в нижнюю часть списка очень долго, поэтому я сомневаюсь, что у меня когда -либо есть время сделать это изменение

victor_pv
Ср 18 января 2017 г. 7:00 утра
Вы можете попробовать с этим наброском, я добавил код, чтобы очистить байты опции, которые должны очистить защиту от записи.
После того, как вы получите обычную ошибку, она даст вам возможность очистить байты опции, что очищает защиту от записи.
После этого вам нужно перезагрузиться и запустить его снова, а второй раз должен программировать загрузчик.


/** * * Maple Mini bootloader updater sketch. * Based on sketch from Gregwar for Robotis OpenCM9.04, which is based on Maple bootloader code. * * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * WARNING WARNING * WARNING This comes with NO WARRANTY, you use it at your own risk WARNING * WARNING WARNING * WARNING Please read this warning text and the instructions below WARNING * WARNING WARNING * WARNING Running this sketch will erase your bootloader replace it WARNING * WARNING with the new STM32duino bootloader WARNING * WARNING WARNING * WARNING Only use this sketch with Maple mini boards. WARNING * WARNING WARNING * WARNING Note. If your bootloader does get messed up, it is possible WARNING * WARNING to reflash using an external USB to Serial adaptor or another WARNING * WARNING Arduino board (to act as a USB to Serial device) WARNING * WARNING WARNING * WARNING For more information see www.stm32duino.com WARNING * WARNING WARNING * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * * * Instructions. * * Upload this sketch onto your Maple mini. * * After upload the LED on the board should start to flash slowly (on for 1 sec off for 1 sec) * * Open the Serial Monitor and follow the on screen instructions * * If the version of the bootloader that is contained in this sketch is already installed, * a message is displayed and you will not be prompted to update. * * If prompted to update, press Y to agree and reflash the bootloader * * After the update has finished, the sketch will wait for you to manually reset the board * or to upload a new sketch * * If you just reset the board. This sketch will run again, as it will not be touched by the bootloader update * However it will display the message to indicate that this bootloader has already been installed * * For support please register to www.stm32duino.com * * Credit goes to Victor PV, Matthis, Ray. * * For source code and binaries for the bootloader see * www.github.com/rogerclarkmelbourne/stm32duino-bootloader * * See also www.rogerclark.net * */ // Data of bootloader const char maple_mini_boot20[]={ 0x00,0x50,0x00,0x20,0xf1,0x00,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x00,0x00,0x00,0x00,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0xb5,0x04,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31 ,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x31,0x01,0x00,0x08,0x5f,0xf8,0x08,0xf1,0x00,0x21,0x03,0xe0,0x09,0x4b,0x5b,0x58,0x43,0x50,0x04,0x31,0x08,0x48,0x09,0x4b,0x42 ,0x18,0x9a,0x42,0xf6,0xd3,0x08,0x4a,0x02,0xe0,0x00,0x23,0x42,0xf8,0x04,0x3b,0x06,0x4b,0x9a,0x42,0xf9,0xd3,0x00,0xf0,0x27,0xfa,0x70,0x47,0x0c,0x19,0x00,0x08,0x00 ,0x00,0x00,0x20,0xc8,0x02,0x00,0x20,0xc8,0x02,0x00,0x20,0x0c,0x03,0x00,0x20,0xfe,0xe7,0x03,0x28,0x8c,0xbf,0x02,0x20,0x00,0x20,0x70,0x47,0x03,0x4b,0x1b,0x68,0x9b ,0x7a,0x13,0xb1,0x02,0x4b,0x05,0x22,0x1a,0x60,0x70,0x47,0x04,0x03,0x00,0x20,0x10,0x03,0x00,0x20,0x70,0x47,0x00,0x00,0x01,0x4b,0x04,0x22,0x1a,0x60,0x70,0x47,0x10 ,0x03,0x00,0x20,0x10,0xb5,0x00,0xf0,0x6f,0xfc,0x21,0x4b,0x21,0x4a,0x1b,0x68,0x00,0x24,0x12,0x68,0x9c,0x72,0xd2,0x79,0x1f,0x49,0x5a,0x72,0x1f,0x4a,0x0c,0x60,0x13 ,0x68,0x20,0x46,0x23,0xf4,0xec,0x43,0x23,0xf0,0x70,0x03,0x43,0xf4,0x00,0x73,0x9b,0xb2,0x13,0x60,0x13,0x68,0x23,0xf4,0xe0,0x43,0x23,0xf0,0x40,0x03,0x9b,0xb2,0x83 ,0xf0,0x10,0x03,0x13,0x60,0x0a,0x68,0x15,0x4b,0x92,0xb2,0x13,0x44,0x5b,0x00,0x40,0x22,0x1a,0x60,0x0b,0x68,0x80,0x22,0x9b,0xb2,0x03,0xf1,0x00,0x53,0x03,0xf5,0x40 ,0x53,0x5b,0x00,0x1a,0x60,0x00,0xf0,0x2f,0xfe,0x0e,0x4b,0x20,0x46,0x1b,0x68,0x93,0xf8,0x30,0x10,0x00,0xf0,0x58,0xfe,0x20,0x46,0x00,0xf0,0x08,0xfe,0x0a,0x4b,0x01 ,0x22,0x20,0x46,0xbd,0xe8,0x10,0x40,0x1a,0x60,0x01,0xf0,0x21,0xbb,0x00,0xbf,0x04,0x03,0x00,0x20,0xb8,0x02,0x00,0x20,0x50,0x5c,0x00,0x40,0x00,0x5c,0x00,0x40,0x04 ,0x30,0x00,0x20,0xdc,0x02,0x00,0x20,0x10,0x03,0x00,0x20,0x38,0xb5,0x12,0x4b,0x05,0x46,0x1a,0x68,0x1c,0x46,0x12,0x78,0x02,0xf0,0x7f,0x02,0x21,0x2a,0x19,0xd1,0x00 ,0xf0,0xac,0xfc,0xb0,0xb1,0x68,0x1e,0x04,0x28,0x13,0xd8,0xdf,0xe8,0x00,0xf0,0x09,0x05,0x07,0x12,0x03,0x00,0x09,0x4b,0x04,0xe0,0x09,0x4b,0x02,0xe0,0x09,0x4b,0x00 ,0xe0,0x09,0x4b,0x22,0x68,0x00,0x24,0x93,0x61,0x54,0x82,0x20,0x46,0x98,0x47,0x20,0x46,0x38,0xbd,0x02,0x20,0x38,0xbd,0x04,0x03,0x00,0x20,0x8d,0x0a,0x00,0x08,0xe5 ,0x0a,0x00,0x08,0xa5,0x0a,0x00,0x08,0xbd,0x0a,0x00,0x08,0x01,0x49,0x01,0xf0,0xd3,0xb8,0x00,0xbf,0x44,0x01,0x00,0x20,0x01,0x49,0x01,0xf0,0xcd,0xb8,0x00,0xbf,0xb8 ,0x02,0x00,0x20,0x05,0x4b,0x1b,0x68,0x9b,0x78,0x07,0x2b,0x04,0xd8,0x04,0x49,0x01,0xeb,0xc3,0x01,0x01,0xf0,0xc0,0xb8,0x00,0x20,0x70,0x47,0x04,0x03,0x00,0x20,0x94 ,0x00,0x00,0x20,0x01,0x49,0x01,0xf0,0xb7,0xb8,0x00,0xbf,0xe0,0x00,0x00,0x20,0x08,0xb5,0x07,0x4b,0x1b,0x68,0x1b,0x78,0x03,0xf0,0x7f,0x03,0x21,0x2b,0x02,0xd1,0x00 ,0xf0,0x5c,0xfc,0x08,0xb9,0x02,0x20,0x08,0xbd,0x00,0x20,0x08,0xbd,0x00,0xbf,0x04,0x03,0x00,0x20,0x70,0x47,0x70,0x47,0x70,0x47,0x70,0x47,0x70,0x47,0x70,0x47,0x70 ,0x47,0x70,0x47,0x70,0x47,0x00,0x00,0x38,0xb5,0x13,0x4d,0x09,0x20,0x2c,0x68,0x00,0xf0,0x5e,0xfb,0x20,0x40,0x11,0x4c,0x40,0xf0,0x50,0x00,0x28,0x60,0x01,0x22,0x20 ,0x46,0x09,0x21,0x00,0xf0,0x9c,0xf9,0x00,0x22,0x20,0x46,0x09,0x21,0x00,0xf0,0x97,0xf9,0x00,0xf0,0x5f,0xfb,0x0a,0x4b,0xc2,0xb2,0x18,0x60,0x09,0x4b,0xc0,0xf3,0x07 ,0x20,0x83,0xf8,0x29,0x20,0x83,0xf8,0x2a,0x00,0x07,0x4b,0x5a,0x71,0x98,0x71,0xbd,0xe8,0x38,0x40,0x00,0xf0,0x9a,0xbe,0x04,0x0c,0x01,0x40,0x00,0x0c,0x01,0x40,0xc8 ,0x02,0x00,0x20,0xec,0x00,0x00,0x20,0x29,0x01,0x00,0x20,0x04,0x4a,0x13,0x68,0x9b,0xb2,0x43,0xf0,0x0c,0x03,0x13,0x60,0x02,0x4b,0x03,0x22,0x1a,0x60,0x70,0x47,0x40 ,0x5c,0x00,0x40,0x10,0x03,0x00,0x20,0x4f,0xf6,0xfb,0x72,0x03,0x4b,0x19,0x68,0x0a,0x40,0x1a,0x60,0x4f,0xf4,0x3f,0x42,0x1a,0x60,0x70,0x47,0x40,0x5c,0x00,0x40,0x10 ,0xb5,0x1e,0x4c,0x07,0x28,0x18,0xbf,0x20,0x70,0x23,0x78,0x05,0x2b,0x32,0xd8,0xdf,0xe8,0x03,0xf0,0x03,0x06,0x0a,0x0e,0x16,0x21,0xff,0xf7,0xe5,0xff,0x2a,0xe0,0xff ,0xf7,0xe2,0xff,0x04,0x23,0x27,0xe0,0x02,0x23,0x63,0x70,0x03,0x23,0x23,0xe0,0x63,0x78,0x01,0x3b,0xdb,0xb2,0x63,0x70,0x63,0x78,0xf3,0xb9,0x04,0x22,0x17,0xe0,0x0f ,0x4a,0x13,0x68,0x9b,0xb2,0x43,0xf0,0x10,0x03,0x13,0x60,0x05,0x23,0x23,0x70,0x0a,0x23,0x63,0x70,0x10,0xbd,0x63,0x78,0x01,0x3b,0xdb,0xb2,0x63,0x70,0x63,0x78,0x5b ,0xb9,0x4f,0xf6,0xef,0x73,0x06,0x4a,0x11,0x68,0x0b,0x40,0x13,0x60,0x06,0x22,0x02,0x4b,0x1a,0x70,0x10,0xbd,0x06,0x23,0x23,0x70,0x10,0xbd,0xce,0x02,0x00,0x20,0x40 ,0x5c,0x00,0x40,0x06,0x4b,0x01,0x22,0x1a,0x60,0x06,0x4a,0x00,0x20,0x06,0x49,0x18,0x60,0x10,0x60,0x4f,0xf4,0xe0,0x52,0x0a,0x80,0x1a,0x60,0x70,0x47,0x00,0xbf,0x40 ,0x5c,0x00,0x40,0x44,0x5c,0x00,0x40,0x08,0x03,0x00,0x20,0x07,0xb5,0x14,0x23,0x8d,0xf8,0x04,0x30,0x00,0x23,0x8d,0xf8,0x05,0x30,0x8d,0xf8,0x06,0x30,0x01,0xa8,0x01 ,0x23,0x8d,0xf8,0x07,0x30,0x00,0xf0,0xfb,0xf9,0x03,0xb0,0x5d,0xf8,0x04,0xfb,0x10,0xb5,0x00,0xf0,0xcb,0xfa,0x09,0x4b,0x00,0x24,0x1b,0x68,0x9c,0x72,0xff,0xf7,0xd1 ,0xff,0x07,0x4b,0x07,0x4a,0x1c,0x60,0x4f,0xf4,0x3f,0x43,0x13,0x80,0x06,0x4a,0x13,0x60,0xff,0xf7,0xdb,0xff,0x05,0x4b,0x1c,0x60,0x10,0xbd,0x04,0x03,0x00,0x20,0x44 ,0x5c,0x00,0x40,0x08,0x03,0x00,0x20,0x40,0x5c,0x00,0x40,0x10,0x03,0x00,0x20,0x07,0xb5,0x14,0x23,0x8d,0xf8,0x04,0x30,0x01,0xa8,0x00,0x23,0x8d,0xf8,0x05,0x30,0x8d ,0xf8,0x06,0x30,0x8d,0xf8,0x07,0x30,0x00,0xf0,0xca,0xf9,0x03,0xb0,0x5d,0xf8,0x04,0xfb,0x00,0x00,0x70,0xb5,0x27,0x4d,0x27,0x4c,0x2b,0x68,0x27,0x4e,0x9b,0xb2,0x23 ,0x80,0x22,0x88,0x33,0x88,0x13,0x40,0x5b,0x05,0x05,0xd5,0x4f,0xf6,0xff,0x33,0x2b,0x60,0x23,0x4b,0x5b,0x68,0x98,0x47,0x22,0x88,0x31,0x88,0x0a,0x40,0x90,0x04,0x44 ,0xbf,0x4d,0xf6,0xff,0x73,0x2b,0x60,0x23,0x88,0x0b,0x40,0xda,0x04,0x05,0xd5,0x4e,0xf6,0xff,0x73,0x00,0x20,0x2b,0x60,0xff,0xf7,0x42,0xff,0x22,0x88,0x33,0x88,0x13 ,0x40,0x1b,0x05,0x04,0xd5,0xff,0xf7,0x21,0xff,0x4f,0xf2,0xff,0x73,0x2b,0x60,0x22,0x88,0x31,0x88,0x0a,0x40,0x90,0x05,0x07,0xd5,0x4f,0xf6,0xff,0x53,0x11,0x4a,0x2b ,0x60,0x13,0x78,0x01,0x33,0xdb,0xb2,0x13,0x70,0x23,0x88,0x0b,0x40,0xda,0x05,0x05,0xd5,0x4f,0xf6,0xff,0x63,0x07,0x20,0x2b,0x60,0xff,0xf7,0x21,0xff,0x22,0x88,0x33 ,0x88,0x13,0x40,0x1b,0x04,0x03,0xd5,0xbd,0xe8,0x70,0x40,0x00,0xf0,0xdc,0xbc,0x70,0xbd,0x00,0xbf,0x44,0x5c,0x00,0x40,0xcc,0x02,0x00,0x20,0x08,0x03,0x00,0x20,0x00 ,0x00,0x00,0x20,0x0c,0x03,0x00,0x20,0x73,0xb5,0x00,0xf0,0xa3,0xf8,0x00,0xf0,0xc5,0xf8,0x00,0xf0,0xf3,0xf8,0xff,0xf7,0xb7,0xfe,0x00,0xf0,0x03,0xf9,0x00,0xf0,0x3b ,0xf9,0x01,0x28,0x04,0x46,0x02,0xd0,0x02,0x28,0x33,0xd0,0x08,0xe0,0x00,0x90,0x01,0x46,0x4f,0xf4,0xa0,0x23,0x05,0x22,0x26,0x48,0x00,0xf0,0x63,0xf8,0x42,0xe0,0x01 ,0x24,0x24,0x48,0x00,0x94,0x4f,0xf4,0xa0,0x23,0x05,0x22,0x21,0x46,0x00,0xf0,0x59,0xf8,0x21,0x48,0x00,0xf0,0xf4,0xf8,0x28,0xb1,0x00,0xf0,0x4b,0xf8,0x04,0x1c,0x18 ,0xbf,0x01,0x24,0x2f,0xe0,0x1d,0x48,0x00,0xf0,0xea,0xf8,0x58,0xb3,0xf4,0xe7,0x01,0x22,0x4f,0xf4,0x80,0x13,0x11,0x46,0x16,0x48,0x00,0x96,0x00,0xf0,0x42,0xf8,0x00 ,0xf0,0xe8,0xfb,0x08,0xb1,0x00,0xf0,0xeb,0xfb,0x01,0x35,0x05,0x2d,0xef,0xd9,0x00,0x2c,0xed,0xd1,0x11,0x48,0x00,0xf0,0xd3,0xf8,0x08,0xb1,0x0f,0x48,0x04,0xe0,0x0d ,0x48,0x00,0xf0,0xcd,0xf8,0x18,0xb1,0x0b,0x48,0x00,0xf0,0x5f,0xf9,0x0d,0xe0,0x01,0x21,0x00,0x91,0x4f,0xf4,0xa0,0x23,0x05,0x22,0x06,0x48,0x00,0xf0,0x22,0xf8,0x00 ,0xf0,0x66,0xf9,0x02,0xe0,0x00,0x25,0x01,0x26,0xdf,0xe7,0x00,0x20,0x02,0xb0,0x70,0xbd,0x00,0xbf,0x00,0x0c,0x01,0x40,0x00,0x50,0x00,0x08,0x00,0x20,0x00,0x08,0xb2 ,0xfa,0x82,0xf2,0x01,0x23,0x52,0x09,0x03,0xfa,0x01,0xf1,0x12,0x01,0x91,0x40,0x01,0x61,0x70,0x47,0x02,0x4b,0x18,0x68,0xc0,0xf3,0x00,0x20,0x70,0x47,0x00,0xbf,0x08 ,0x0c,0x01,0x40,0x2d,0xe9,0xf8,0x43,0x9d,0xf8,0x20,0x90,0x14,0x46,0xc9,0xf1,0x01,0x05,0xed,0xb2,0x2a,0x46,0x07,0x46,0x88,0x46,0x1e,0x46,0xff,0xf7,0xe0,0xff,0xb4 ,0xb1,0x33,0x46,0x13,0xb1,0x00,0xbf,0x01,0x3b,0xfb,0xe7,0x4a,0x46,0x41,0x46,0x38,0x46,0xff,0xf7,0xd5,0xff,0x33,0x46,0x13,0xb1,0x00,0xbf,0x01,0x3b,0xfb,0xe7,0x2a ,0x46,0x41,0x46,0x38,0x46,0x01,0x3c,0xff,0xf7,0xca,0xff,0xe4,0xb2,0xe7,0xe7,0xbd,0xe8,0xf8,0x83,0x0d,0x4b,0x0e,0x49,0x1a,0x68,0x42,0xf0,0x01,0x02,0x1a,0x60,0x08 ,0x68,0x0c,0x4a,0x02,0x40,0x0a,0x60,0x1a,0x68,0x22,0xf0,0x84,0x72,0x22,0xf4,0x80,0x32,0x1a,0x60,0x1a,0x68,0x22,0xf4,0x80,0x22,0x1a,0x60,0x0b,0x68,0x00,0x22,0x23 ,0xf4,0xfe,0x03,0x0b,0x60,0x04,0x4b,0x1a,0x60,0x70,0x47,0x00,0x10,0x02,0x40,0x04,0x10,0x02,0x40,0x00,0x00,0xff,0xf8,0x08,0x10,0x02,0x40,0x15,0x4b,0x1a,0x68,0x42 ,0xf0,0x01,0x12,0x1a,0x60,0x1a,0x68,0x12,0x48,0x92,0x03,0xfb,0xd5,0x12,0x4a,0x12,0x21,0x11,0x60,0xa2,0xf6,0xfc,0x72,0x11,0x68,0x41,0xf4,0xe8,0x11,0x41,0xf4,0x80 ,0x61,0x11,0x60,0x01,0x68,0x41,0xf0,0x80,0x71,0x01,0x60,0x19,0x68,0x11,0xf0,0x40,0x7f,0xfb,0xd0,0x11,0x68,0x41,0xf0,0x02,0x01,0x11,0x60,0x11,0x68,0x09,0x07,0xfc ,0xd5,0x9a,0x69,0x42,0xf4,0xfe,0x72,0x9a,0x61,0xda,0x69,0x42,0xf4,0x00,0x02,0xda,0x61,0x70,0x47,0x00,0x10,0x02,0x40,0x00,0x20,0x02,0x40,0x06,0x4b,0x07,0x4a,0x1a ,0x60,0x4f,0xf0,0x80,0x72,0xda,0x60,0x05,0x4a,0x13,0x68,0x23,0xf0,0xf0,0x03,0x43,0xf0,0x10,0x03,0x13,0x60,0x70,0x47,0x04,0x0c,0x01,0x40,0x08,0x0c,0x01,0x40,0x00 ,0x0c,0x01,0x40,0x05,0x4b,0x1a,0x68,0xd1,0x07,0x5e,0xbf,0x1a,0x68,0x42,0xf0,0x01,0x02,0x1a,0x60,0x1a,0x68,0x92,0x07,0xfc,0xd5,0x70,0x47,0x00,0x10,0x02,0x40,0x03 ,0x68,0x03,0x48,0x18,0x40,0x00,0xf1,0x60,0x43,0x58,0x42,0x58,0x41,0x70,0x47,0x00,0x00,0xfe,0x2f,0x03,0x4a,0x43,0x68,0x10,0x60,0x02,0x68,0x82,0xf3,0x08,0x88,0x18 ,0x47,0x00,0xbf,0x08,0xed,0x00,0xe0,0x08,0x4a,0xd3,0x69,0x43,0xf0,0xc0,0x53,0xd3,0x61,0x07,0x4b,0x1a,0x68,0x42,0xf4,0x80,0x72,0x1a,0x60,0x05,0x4a,0x10,0x85,0x1a ,0x68,0x22,0xf4,0x80,0x72,0x1a,0x60,0x70,0x47,0x00,0xbf,0x00,0x10,0x02,0x40,0x00,0x70,0x00,0x40,0x00,0x6c,0x00,0x40,0x44,0xf2,0x4c,0x21,0x0e,0x4b,0x10,0xb5,0xda ,0x69,0x42,0xf0,0xc0,0x52,0xda,0x61,0x0c,0x4a,0x12,0x8d,0x92,0xb2,0x8a,0x42,0x19,0x46,0x07,0xd0,0x44,0xf2,0x4d,0x23,0x9a,0x42,0x01,0xd1,0x02,0x24,0x02,0xe0,0x00 ,0x24,0x07,0xe0,0x01,0x24,0x00,0x20,0xff,0xf7,0xce,0xff,0xcb,0x69,0x23,0xf0,0xc0,0x53,0xcb,0x61,0x20,0x46,0x10,0xbd,0x00,0x10,0x02,0x40,0x00,0x6c,0x00,0x40,0x17 ,0x4b,0x30,0xb5,0xda,0x68,0x43,0x78,0xd2,0x43,0xc2,0xf3,0x02,0x22,0xc2,0xf1,0x04,0x01,0x03,0xfa,0x01,0xf1,0x0f,0x23,0xd3,0x40,0x82,0x78,0x13,0x40,0x02,0x78,0x0b ,0x43,0x02,0xf0,0x03,0x01,0x02,0xf0,0xfc,0x02,0x02,0xf1,0x60,0x42,0x02,0xf5,0x61,0x42,0xd2,0xf8,0x00,0x43,0xcd,0x00,0x1b,0x01,0xab,0x40,0xff,0x21,0xa9,0x40,0x63 ,0x40,0x0b,0x40,0x63,0x40,0xc2,0xf8,0x00,0x33,0x03,0x78,0x01,0x22,0x59,0x09,0x03,0xf0,0x1f,0x03,0x02,0xfa,0x03,0xf3,0x02,0x4a,0x42,0xf8,0x21,0x30,0x30,0xbd,0x00 ,0xed,0x00,0xe0,0x00,0xe1,0x00,0xe0,0x07,0x4b,0x4f,0xf0,0xff,0x32,0xc3,0xf8,0x80,0x20,0xc3,0xf8,0x84,0x20,0xc3,0xf8,0x80,0x21,0xc3,0xf8,0x84,0x21,0x04,0x22,0x43 ,0xf8,0xf0,0x2c,0x70,0x47,0x00,0xbf,0x00,0xe1,0x00,0xe0,0x10,0xb5,0x04,0x46,0x06,0x4b,0x80,0x22,0x1a,0x60,0xff,0xf7,0xdb,0xfd,0xff,0xf7,0xe5,0xff,0xff,0xf7,0xe9 ,0xfe,0x20,0x46,0xbd,0xe8,0x10,0x40,0xff,0xf7,0x64,0xbf,0x10,0x20,0x02,0x40,0x02,0x4a,0x03,0x4b,0xda,0x60,0x00,0xbf,0xfd,0xe7,0x00,0xbf,0x04,0x00,0xfa,0x05,0x00 ,0xed,0x00,0xe0,0x0a,0x4b,0x10,0xb5,0x1a,0x68,0x0a,0x4c,0x02,0x22,0x1a,0x60,0x22,0x68,0x08,0x49,0x12,0xf0,0x01,0x0f,0xfa,0xd1,0x07,0x4a,0x10,0x60,0x42,0x22,0x1a ,0x60,0x0a,0x68,0x12,0xf0,0x01,0x02,0xfb,0xd1,0x1a,0x60,0x01,0x20,0x10,0xbd,0x10,0x20,0x02,0x40,0x0c,0x20,0x02,0x40,0x14,0x20,0x02,0x40,0x73,0xb5,0x8b,0xb2,0x00 ,0x93,0x0b,0x0c,0x01,0x93,0x0f,0x4b,0x01,0x24,0x0f,0x4e,0x1a,0x68,0x1c,0x60,0x34,0x68,0x0d,0x4d,0x14,0xf0,0x01,0x0f,0xfa,0xd1,0x01,0x9c,0xa4,0xb2,0x44,0x80,0x2c ,0x68,0xe6,0x07,0xfc,0xd4,0x00,0x9c,0xa4,0xb2,0x04,0x80,0x2c,0x68,0xe4,0x07,0xfc,0xd4,0x22,0xf0,0x01,0x02,0x1a,0x60,0x00,0x68,0x0b,0x1a,0x58,0x42,0x58,0x41,0x02 ,0xb0,0x70,0xbd,0x10,0x20,0x02,0x40,0x0c,0x20,0x02,0x40,0x01,0x4b,0x80,0x22,0x1a,0x60,0x70,0x47,0x10,0x20,0x02,0x40,0x03,0x4b,0x04,0x4a,0x1a,0x60,0x02,0xf1,0x88 ,0x32,0x1a,0x60,0x70,0x47,0x00,0xbf,0x04,0x20,0x02,0x40,0x23,0x01,0x67,0x45,0x07,0x28,0xc8,0xbf,0x08,0x38,0x0f,0x23,0x80,0x00,0x03,0xfa,0x00,0xf0,0xc0,0x43,0x70 ,0x47,0x00,0x00,0x02,0x4b,0x18,0x88,0x00,0xf5,0x00,0x30,0x80,0x02,0x70,0x47,0xe0,0xf7,0xff,0x1f,0x04,0x4b,0x1b,0x88,0x80,0x2b,0x8c,0xbf,0x4f,0xf4,0x00,0x60,0x4f ,0xf4,0x80,0x60,0x70,0x47,0x00,0xbf,0xe0,0xf7,0xff,0x1f,0x0d,0x4a,0x00,0x23,0x02,0x21,0x13,0x70,0x53,0x70,0x93,0x70,0xd3,0x70,0x11,0x71,0x53,0x71,0x0a,0x4a,0x0a ,0x49,0x13,0x60,0x0a,0x4a,0x13,0x80,0x0a,0x4a,0x11,0x60,0x0a,0x4a,0x01,0xf5,0x88,0x41,0x11,0x60,0x09,0x4a,0x03,0x21,0x13,0x70,0x09,0x4a,0x11,0x70,0x09,0x4a,0x13 ,0x70,0x70,0x47,0x1d,0x0b,0x00,0x20,0x18,0x0b,0x00,0x20,0x00,0x0c,0x00,0x20,0x16,0x0b,0x00,0x20,0xc4,0x02,0x00,0x20,0xc0,0x02,0x00,0x20,0x1c,0x0b,0x00,0x20,0xd0 ,0x02,0x00,0x20,0x23,0x0b,0x00,0x20,0x08,0xb5,0x0e,0x4b,0x0e,0x48,0x1a,0x79,0x00,0x21,0xd2,0xb2,0x01,0x2a,0x01,0x60,0x08,0xd1,0x02,0x22,0x1a,0x71,0x19,0x70,0xff ,0xf7,0x22,0xff,0xbd,0xe8,0x08,0x40,0xff,0xf7,0xe0,0xbc,0x12,0xf0,0xfd,0x0f,0x06,0xd0,0x02,0x22,0x1a,0x71,0x19,0x70,0xbd,0xe8,0x08,0x40,0xff,0xf7,0x38,0xbf,0x08 ,0xbd,0x00,0xbf,0x1d,0x0b,0x00,0x20,0x18,0x0b,0x00,0x20,0x20,0xb9,0x03,0x4b,0x01,0x22,0x1b,0x68,0x1a,0x82,0x70,0x47,0x01,0x48,0x70,0x47,0x04,0x03,0x00,0x20,0x21 ,0x0b,0x00,0x20,0x20,0xb9,0x03,0x4b,0x06,0x22,0x1b,0x68,0x1a,0x82,0x70,0x47,0x01,0x48,0x70,0x47,0x04,0x03,0x00,0x20,0x1d,0x0b,0x00,0x20,0x06,0x4b,0x1b,0x68,0x30 ,0xb9,0xd9,0x88,0x5a,0x8a,0x8a,0x1a,0x1a,0x82,0x04,0x4b,0x19,0x80,0x70,0x47,0x5b,0x8a,0x03,0x48,0x18,0x44,0x70,0x47,0x04,0x03,0x00,0x20,0x16,0x0b,0x00,0x20,0x14 ,0x03,0x00,0x20,0x08,0x4a,0x30,0xb9,0x12,0x68,0x08,0x4b,0x51,0x8a,0x1b,0x88,0x5b,0x1a,0x13,0x82,0x70,0x47,0x06,0x4b,0x12,0x68,0x18,0x68,0x05,0x4b,0x52,0x8a,0x1b ,0x68,0x18,0x44,0x10,0x44,0x70,0x47,0x04,0x03,0x00,0x20,0x16,0x0b,0x00,0x20,0x18,0x0b,0x00,0x20,0xc4,0x02,0x00,0x20,0x2d,0xe9,0xf0,0x41,0x13,0x4b,0x14,0x4e,0x1b ,0x78,0x34,0x68,0x02,0x2b,0x04,0xf1,0x00,0x64,0x0c,0xbf,0x04,0xf5,0xa0,0x44,0x04,0xf5,0x00,0x54,0x20,0x46,0xff,0xf7,0xe5,0xfe,0x0e,0x4f,0xdf,0xf8,0x38,0x80,0x00 ,0x25,0x3b,0x88,0x0b,0x49,0x9b,0xb2,0x9d,0x42,0x06,0xda,0x55,0xf8,0x08,0x10,0x60,0x19,0xff,0xf7,0xf3,0xfe,0x04,0x35,0xf3,0xe7,0x0b,0x88,0x9a,0xb2,0x33,0x68,0x13 ,0x44,0x33,0x60,0x00,0x23,0x0b,0x80,0xbd,0xe8,0xf0,0x81,0x1c,0x0b,0x00,0x20,0x18,0x0b,0x00,0x20,0x16,0x0b,0x00,0x20,0x14,0x03,0x00,0x20,0xf8,0xb5,0x81,0x49,0x81 ,0x4c,0x01,0x20,0x08,0x70,0x23,0x79,0x00,0x22,0xdb,0xb2,0x02,0x2b,0x22,0x70,0x5a,0xd1,0x08,0x70,0x7d,0x49,0x09,0x68,0x48,0x78,0x01,0x28,0x2a,0xd1,0xc8,0x88,0x00 ,0x28,0x00,0xf0,0xc6,0x80,0x7a,0x48,0x09,0x7b,0x02,0x60,0x01,0x29,0x4f,0xf0,0x03,0x02,0x22,0x71,0x0b,0xd0,0x02,0x29,0x1a,0xd1,0x76,0x4b,0x1a,0x70,0x76,0x4a,0x76 ,0x4b,0x1a,0x60,0xff,0xf7,0xde,0xfd,0xff,0xf7,0xe6,0xfe,0x0b,0xe0,0x74,0x49,0x72,0x4a,0x11,0x60,0x6f,0x4a,0x13,0x70,0xff,0xf7,0xd4,0xfd,0xff,0xf7,0xdc,0xfe,0x6d ,0x48,0xff,0xf7,0x8f,0xfe,0x44,0xf2,0x4d,0x20,0xff,0xf7,0xed,0xfd,0xc3,0xe0,0x0a,0x23,0x62,0xe0,0x02,0x28,0x21,0xd1,0x09,0x23,0x23,0x71,0xca,0x88,0x69,0x4b,0x69 ,0x48,0x1a,0x80,0x1a,0x88,0x92,0xb2,0x02,0x80,0x1b,0x88,0x4a,0x88,0x9b,0xb2,0x53,0x43,0x5f,0x4a,0x13,0x60,0x0b,0x7b,0x01,0x2b,0x03,0xd0,0x02,0x2b,0x09,0xd1,0x5d ,0x4a,0x00,0xe0,0x5e,0x4a,0x5d,0x4b,0x1a,0x60,0xff,0xf7,0xcb,0xfe,0x5f,0x4b,0x18,0x60,0xa1,0xe0,0x0a,0x23,0x23,0x71,0x03,0x23,0x9c,0xe0,0x06,0x28,0x3c,0xd0,0x03 ,0x28,0x19,0xd0,0x05,0x28,0x3c,0xe0,0x03,0x2b,0x0b,0xd1,0x4f,0x4a,0x12,0x68,0x52,0x78,0x03,0x2a,0x04,0xd1,0x05,0x23,0x23,0x71,0xff,0xf7,0x5d,0xff,0x8b,0xe0,0x05 ,0x2a,0x2e,0xe0,0x04,0x2b,0x09,0xd1,0x51,0x49,0x08,0x78,0x02,0x28,0x01,0xbf,0x03,0x23,0x62,0x70,0x0b,0x70,0x05,0x23,0x23,0x71,0x7d,0xe0,0x05,0x2b,0x14,0xd1,0x42 ,0x4b,0x1a,0x68,0x53,0x78,0x01,0x2b,0x08,0xd1,0xd3,0x88,0x0b,0xb1,0x03,0x23,0xf2,0xe7,0x06,0x23,0x23,0x71,0xff,0xf7,0x79,0xfe,0x6d,0xe0,0x06,0x2b,0x4e,0xd0,0x03 ,0x2b,0x4c,0xd0,0x05,0x2b,0x63,0xd1,0x49,0xe0,0x06,0x2b,0x0b,0xd1,0x37,0x49,0x09,0x68,0x49,0x78,0x03,0x29,0x03,0xd1,0x08,0x23,0x23,0x71,0x22,0x70,0x5b,0xe0,0x05 ,0x29,0x55,0xd1,0xd8,0xe7,0x07,0x2b,0xf6,0xd0,0x08,0x2b,0xd4,0xd0,0x09,0x2b,0x3d,0xd1,0x2e,0x4b,0x1a,0x68,0x53,0x78,0x02,0x2b,0x2e,0xd1,0xd0,0x88,0x40,0xb3,0x30 ,0x4e,0x52,0x88,0x33,0x88,0x2a,0x4d,0x9b,0xb2,0x53,0x43,0x2b,0x4f,0x2b,0x60,0xd7,0xf8,0x00,0xc0,0xdf,0xf8,0xb4,0xe0,0x2b,0x68,0x32,0x88,0x63,0x44,0xde,0xf8,0x00 ,0x10,0x92,0xb2,0x13,0x44,0x8b,0x42,0x27,0x49,0x03,0xd8,0x33,0x88,0x9b,0xb2,0x0b,0x80,0x1a,0xe0,0xde,0xf8,0x00,0x20,0x3b,0x68,0x2d,0x68,0xd3,0x1a,0x5b,0x1b,0x9b ,0xb2,0x0b,0x80,0x0b,0x88,0x9b,0xb2,0x98,0x42,0x08,0xd8,0x00,0x23,0x0b,0x80,0x05,0xe0,0x0a,0x23,0x23,0x71,0x09,0x23,0x1d,0xe0,0x06,0x2b,0x01,0xd1,0x02,0x23,0x9a ,0xe7,0x03,0x2b,0x01,0xd0,0x05,0x2b,0x12,0xd1,0x09,0x23,0x94,0xe7,0x0a,0x2b,0x0e,0xd1,0x0e,0x4b,0x1b,0x68,0x5b,0x78,0x03,0x2b,0x01,0xd1,0x0a,0x23,0x8b,0xe7,0x05 ,0x2b,0xfb,0xd0,0x04,0x2b,0x03,0xd1,0x02,0x23,0x23,0x71,0x00,0x23,0x02,0xe0,0x0a,0x23,0x23,0x71,0x0f,0x23,0x23,0x70,0x20,0x78,0xb0,0xfa,0x80,0xf0,0x40,0x09,0xf8 ,0xbd,0x00,0xbf,0x23,0x0b,0x00,0x20,0x1d,0x0b,0x00,0x20,0x04,0x03,0x00,0x20,0x18,0x0b,0x00,0x20,0x1c,0x0b,0x00,0x20,0x00,0x20,0x00,0x08,0xc4,0x02,0x00,0x20,0x00 ,0x50,0x00,0x08,0x14,0x0b,0x00,0x20,0x16,0x0b,0x00,0x20,0xc0,0x02,0x00,0x20,0xd0,0x02,0x00,0x20,0x01,0x4b,0x18,0x78,0x70,0x47,0x00,0xbf,0x23,0x0b,0x00,0x20,0x00 ,0xbf,0xfd,0xe7,0x80,0x00,0x00,0xf1,0x80,0x40,0x00,0xf5,0xb8,0x40,0x03,0x68,0xca,0x06,0x23,0xf4,0xe0,0x43,0x23,0xf0,0x40,0x03,0x9b,0xb2,0x48,0xbf,0x83,0xf0,0x10 ,0x03,0x8a,0x06,0x48,0xbf,0x83,0xf0,0x20,0x03,0x03,0x60,0x70,0x47,0x80,0x00,0x00,0xf1,0x80,0x40,0x00,0xf5,0xb8,0x40,0x03,0x68,0x23,0xf4,0x80,0x43,0x23,0xf0,0x70 ,0x03,0x9b,0xb2,0x83,0xf4,0x40,0x53,0x03,0x60,0x70,0x47,0x80,0x00,0x00,0xf1,0x80,0x40,0x00,0xf5,0xb8,0x40,0x03,0x68,0x23,0xf4,0xe2,0x43,0x23,0xf0,0x70,0x03,0x1b ,0x04,0x1b,0x0c,0x03,0x60,0x70,0x47,0xff,0xf7,0xf0,0xbf,0x80,0x00,0x00,0xf1,0x80,0x40,0x00,0xf5,0xb8,0x40,0x03,0x68,0x5b,0x04,0x06,0xd5,0x48,0xf6,0x8f,0x73,0x02 ,0x68,0x13,0x40,0x43,0xf4,0x80,0x43,0x03,0x60,0x70,0x47,0x80,0x00,0x00,0xf1,0x80,0x40,0x00,0xf5,0xb8,0x40,0x03,0x68,0x5b,0x06,0x06,0xd5,0x48,0xf6,0x8f,0x73,0x02 ,0x68,0x13,0x40,0x43,0xf0,0x40,0x03,0x03,0x60,0x70,0x47,0x04,0x4b,0x1b,0x68,0x9b,0xb2,0x03,0xeb,0xc0,0x00,0x03,0x4b,0x03,0x44,0x5b,0x00,0x19,0x60,0x70,0x47,0x50 ,0x5c,0x00,0x40,0x02,0x30,0x00,0x20,0x0d,0x4b,0x3e,0x29,0x1b,0x68,0x9b,0xb2,0x03,0xeb,0xc0,0x00,0x0b,0x4b,0x03,0x44,0x4f,0xea,0x43,0x02,0x09,0xd9,0x4b,0x09,0xc8 ,0x06,0x04,0xbf,0x03,0xf1,0xff,0x33,0x9b,0xb2,0x9b,0x02,0x43,0xf4,0x00,0x43,0x04,0xe0,0x4b,0x08,0xc9,0x07,0x48,0xbf,0x01,0x33,0x9b,0x02,0x13,0x60,0x70,0x47,0x50 ,0x5c,0x00,0x40,0x06,0x30,0x00,0x20,0x05,0x4b,0x1b,0x68,0x9b,0xb2,0x03,0xeb,0xc0,0x00,0x00,0xf1,0x00,0x50,0x00,0xf5,0x40,0x50,0x40,0x00,0x00,0x88,0x70,0x47,0x50 ,0x5c,0x00,0x40,0xff,0xf7,0xf0,0xbf,0x04,0x4b,0x1b,0x68,0x9b,0xb2,0x03,0xeb,0xc0,0x00,0x03,0x4b,0x03,0x44,0x5b,0x00,0x18,0x88,0x70,0x47,0x50,0x5c,0x00,0x40,0x04 ,0x30,0x00,0x20,0xff,0xf7,0xf0,0xbf,0x2d,0xe9,0xf8,0x43,0xdf,0xf8,0x58,0x81,0x4e,0x4f,0xc1,0x46,0x3b,0x68,0x4e,0x4a,0x99,0xb2,0x1b,0x04,0x11,0x80,0x40,0xf1,0x92 ,0x80,0x47,0xf6,0xff,0x73,0x3b,0x60,0x13,0x88,0x03,0xf0,0x0f,0x03,0x88,0xf8,0x00,0x30,0x00,0x2b,0x60,0xd1,0x47,0x4c,0x47,0x4e,0x23,0x68,0x47,0x4d,0x03,0xf4,0x40 ,0x53,0x33,0x80,0x23,0x68,0x03,0xf0,0x30,0x03,0x2b,0x80,0x23,0x68,0x23,0xf4,0x80,0x43,0x23,0xf0,0x70,0x03,0x9b,0xb2,0x83,0xf4,0x00,0x53,0x23,0x60,0x23,0x68,0x23 ,0xf4,0xe0,0x43,0x23,0xf0,0x40,0x03,0x9b,0xb2,0x83,0xf0,0x20,0x03,0x23,0x60,0x13,0x88,0xd8,0x06,0x02,0xd5,0x23,0x68,0x19,0x06,0x07,0xd5,0x48,0xf6,0x0f,0x73,0x22 ,0x68,0x13,0x40,0x23,0x60,0x00,0xf0,0x6f,0xfc,0x12,0xe0,0x1a,0x05,0x07,0xd5,0x40,0xf6,0x8f,0x73,0x22,0x68,0x13,0x40,0x23,0x60,0x00,0xf0,0x6b,0xfa,0x08,0xe0,0x1b ,0x04,0xb7,0xd5,0x40,0xf6,0x8f,0x73,0x22,0x68,0x13,0x40,0x23,0x60,0x00,0xf0,0xdd,0xfb,0x23,0x68,0x32,0x88,0x23,0xf4,0x80,0x43,0x23,0xf0,0x70,0x03,0x9b,0xb2,0xd7 ,0x04,0x48,0xbf,0x83,0xf4,0x80,0x53,0x96,0x04,0x22,0x4a,0x48,0xbf,0x83,0xf4,0x00,0x53,0x13,0x60,0x13,0x68,0x29,0x88,0x23,0xf4,0xe0,0x43,0x23,0xf0,0x40,0x03,0x9b ,0xb2,0xcc,0x06,0x48,0xbf,0x83,0xf0,0x10,0x03,0x88,0x06,0x48,0xbf,0x83,0xf0,0x20,0x03,0x13,0x60,0xbd,0xe8,0xf8,0x83,0x9a,0x00,0x02,0xf1,0x80,0x42,0x02,0xf5,0xb8 ,0x42,0x14,0x68,0x21,0x04,0x09,0xd5,0x40,0xf6,0x8f,0x71,0x10,0x68,0x01,0x3b,0x01,0x40,0x11,0x60,0x12,0x4a,0x52,0xf8,0x23,0x30,0x98,0x47,0x22,0x06,0x7f,0xf5,0x79 ,0xaf,0x48,0xf6,0x0f,0x71,0x99,0xf8,0x00,0x20,0x93,0x00,0x03,0xf1,0x80,0x43,0x03,0xf5,0xb8,0x43,0x18,0x68,0x01,0x3a,0x01,0x40,0x19,0x60,0x09,0x4b,0x53,0xf8,0x22 ,0x30,0x98,0x47,0x66,0xe7,0xbd,0xe8,0xf8,0x83,0x00,0xbf,0x44,0x5c,0x00,0x40,0xcc,0x02,0x00,0x20,0x00,0x5c,0x00,0x40,0xd2,0x02,0x00,0x20,0xd4,0x02,0x00,0x20,0x50 ,0x00,0x00,0x20,0x34,0x00,0x00,0x20,0xe0,0x02,0x00,0x20,0x06,0x4b,0x07,0x4a,0x07,0x49,0x13,0x60,0x02,0x22,0x1a,0x72,0x06,0x4b,0x07,0x4a,0x13,0x60,0x07,0x4a,0x1b ,0x68,0x11,0x60,0x18,0x47,0x00,0xbf,0xe4,0x02,0x00,0x20,0x04,0x03,0x00,0x20,0x6c,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0xdc,0x02,0x00,0x20,0x00,0x03,0x00,0x20,0x10 ,0xb5,0x06,0x4c,0x18,0xb9,0x23,0x68,0x01,0x22,0x1a,0x82,0x10,0xbd,0x04,0x4b,0x1b,0x68,0x1b,0x68,0x98,0x47,0x20,0x68,0x0a,0x30,0x10,0xbd,0x04,0x03,0x00,0x20,0x00 ,0x03,0x00,0x20,0x10,0xb5,0x06,0x4c,0x18,0xb9,0x23,0x68,0x01,0x22,0x1a,0x82,0x10,0xbd,0x04,0x4b,0x1b,0x68,0x9b,0x68,0x98,0x47,0x20,0x68,0x0c,0x30,0x10,0xbd,0x04 ,0x03,0x00,0x20,0x00,0x03,0x00,0x20,0x10,0xb5,0x20,0x4a,0x18,0xb9,0x13,0x68,0x02,0x22,0x1a,0x82,0x10,0xbd,0x1e,0x48,0x14,0x68,0x00,0x23,0x03,0x80,0x21,0x78,0x02 ,0x46,0x11,0xf0,0x7f,0x01,0x0d,0xd1,0x63,0x7a,0x99,0x06,0x44,0xbf,0x02,0x21,0x01,0x70,0x13,0xf0,0x40,0x0f,0x03,0x78,0x14,0xbf,0x23,0xf0,0x01,0x03,0x43,0xf0,0x01 ,0x03,0x14,0xe0,0x01,0x29,0x20,0xd0,0x02,0x29,0x1d,0xd1,0x21,0x79,0x01,0xf0,0x0f,0x03,0x9b,0x00,0x03,0xf1,0x80,0x43,0x03,0xf5,0xb8,0x43,0x11,0xf0,0x80,0x0f,0x1b ,0x68,0x06,0xd0,0x03,0xf0,0x30,0x03,0x10,0x2b,0x07,0xd1,0x01,0x23,0x13,0x70,0x04,0xe0,0x03,0xf4,0x40,0x53,0xb3,0xf5,0x80,0x5f,0xf6,0xe7,0x05,0x4b,0x1b,0x68,0x1b ,0x69,0x98,0x47,0x02,0x48,0x10,0xbd,0x18,0x46,0x10,0xbd,0x04,0x03,0x00,0x20,0x0a,0x03,0x00,0x20,0x00,0x03,0x00,0x20,0x2d,0xe9,0xf8,0x43,0x23,0x4f,0xdf,0xf8,0xa0 ,0x80,0x3c,0x68,0x23,0x8a,0xbb,0xb9,0x26,0x7a,0x04,0x2e,0x14,0xd1,0x20,0x48,0x02,0x78,0x01,0x2a,0x0b,0xd1,0x1f,0x4a,0x11,0x68,0x1f,0x4a,0x89,0xb2,0x0a,0x44,0x52 ,0x00,0x13,0x60,0x30,0x22,0xa8,0xf8,0x00,0x20,0x03,0x70,0x29,0xe0,0x10,0x23,0xa8,0xf8,0x00,0x30,0x07,0x26,0x24,0xe0,0xa5,0x8a,0xab,0x42,0x94,0xbf,0x04,0x26,0x02 ,0x26,0x9d,0x42,0x28,0xbf,0x1d,0x46,0xa3,0x69,0x28,0x46,0x98,0x47,0x81,0x46,0x00,0x20,0xff,0xf7,0x87,0xfe,0x2a,0x46,0x01,0x46,0x48,0x46,0x00,0xf0,0x72,0xfb,0x29 ,0x46,0x00,0x20,0xff,0xf7,0x42,0xfe,0x23,0x8a,0x4f,0xf4,0x40,0x52,0x5b,0x1b,0x23,0x82,0x63,0x8a,0x1d,0x44,0x30,0x23,0xa8,0xf8,0x00,0x30,0x07,0x4b,0x65,0x82,0x1a ,0x80,0x3b,0x68,0x1e,0x72,0xbd,0xe8,0xf8,0x83,0x00,0xbf,0x04,0x03,0x00,0x20,0x24,0x0b,0x00,0x20,0x50,0x5c,0x00,0x40,0x02,0x30,0x00,0x20,0xd2,0x02,0x00,0x20,0xd4 ,0x02,0x00,0x20,0x10,0xb5,0x0a,0x4b,0x0a,0x49,0x1b,0x68,0x49,0x78,0x9a,0x78,0x91,0x42,0x0a,0xd3,0xd9,0x78,0x41,0xb9,0x9c,0x88,0x34,0xb9,0x9a,0x72,0x06,0x4b,0x1b ,0x68,0x5b,0x68,0x98,0x47,0x20,0x46,0x10,0xbd,0x02,0x20,0x10,0xbd,0x00,0xbf,0x04,0x03,0x00,0x20,0x90,0x00,0x00,0x20,0x00,0x03,0x00,0x20,0x38,0xb5,0x0e,0x4a,0x0e ,0x4d,0x12,0x68,0x2b,0x68,0x92,0x69,0x99,0x78,0x18,0x79,0x90,0x47,0x2b,0x68,0x9a,0x7a,0x7a,0xb1,0x70,0xb9,0x5a,0x79,0x62,0xb9,0xdc,0x78,0x54,0xb9,0x08,0x4b,0x1b ,0x68,0xdb,0x68,0x98,0x47,0x2b,0x68,0x20,0x46,0x1a,0x79,0xda,0x72,0x9a,0x78,0x1a,0x73,0x38,0xbd,0x02,0x20,0x38,0xbd,0xdc,0x02,0x00,0x20,0x04,0x03,0x00,0x20,0x00 ,0x03,0x00,0x20,0x38,0xb5,0x2e,0x4b,0x1b,0x68,0x18,0x78,0x10,0xf0,0x7f,0x00,0x04,0xd1,0x5a,0x7a,0x22,0xf0,0x20,0x02,0x5a,0x72,0x38,0xbd,0x02,0x28,0x4d,0xd1,0x5a ,0x88,0x00,0x2a,0x4b,0xd1,0x5a,0x79,0x00,0x2a,0x48,0xd1,0x19,0x79,0x25,0x4d,0x21,0xf0,0x80,0x00,0x84,0x00,0x04,0xf1,0x80,0x42,0x02,0xf5,0xb8,0x42,0x12,0x68,0x2d ,0x78,0x11,0xf0,0x80,0x0f,0x14,0xbf,0x02,0xf0,0x30,0x02,0x02,0xf4,0x40,0x52,0xa8,0x42,0x33,0xd2,0x92,0xb3,0x9b,0x7a,0x83,0xb3,0x04,0xf1,0x80,0x44,0x04,0xf5,0xb8 ,0x44,0x0a,0x06,0x23,0x68,0x0c,0xd5,0x03,0xf0,0x30,0x03,0x10,0x2b,0x1f,0xd1,0xc4,0xb2,0x20,0x46,0xff,0xf7,0x9a,0xfd,0x30,0x21,0x20,0x46,0xff,0xf7,0x52,0xfd,0x16 ,0xe0,0x03,0xf4,0x40,0x53,0xb3,0xf5,0x80,0x5f,0x11,0xd1,0x28,0xb9,0x0e,0x4b,0x93,0xf8,0x30,0x10,0xff,0xf7,0xa8,0xfd,0x01,0xe0,0xff,0xf7,0x77,0xfd,0x23,0x68,0x23 ,0xf4,0x80,0x43,0x23,0xf0,0x70,0x03,0x9b,0xb2,0x83,0xf4,0x40,0x53,0x23,0x60,0x06,0x4b,0x1b,0x68,0x5b,0x69,0x98,0x47,0x00,0x20,0x38,0xbd,0x02,0x20,0x38,0xbd,0x04 ,0x03,0x00,0x20,0x90,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x03,0x00,0x20,0x38,0xb5,0x1d,0x4b,0x1d,0x4d,0x18,0x68,0x2d,0x78,0x01,0x79,0x21,0xf0,0x80,0x04,0xa3 ,0x00,0x03,0xf1,0x80,0x42,0x02,0xf5,0xb8,0x42,0x12,0x68,0x11,0xf0,0x80,0x0f,0x14,0xbf,0x02,0xf0,0x30,0x02,0x02,0xf4,0x40,0x52,0xac,0x42,0x21,0xd2,0x44,0x88,0xfc ,0xb9,0xf2,0xb1,0x82,0x7a,0xe2,0xb1,0x03,0xf1,0x80,0x43,0x03,0xf5,0xb8,0x43,0x1a,0x68,0x09,0x06,0x4b,0xbf,0x22,0xf4,0xe0,0x42,0x22,0xf4,0x80,0x42,0x22,0xf0,0x40 ,0x02,0x22,0xf0,0x70,0x02,0x4b,0xbf,0x92,0xb2,0x92,0xb2,0x82,0xf0,0x10,0x02,0x82,0xf4,0x80,0x52,0x1a,0x60,0x06,0x4b,0x1b,0x68,0x9b,0x69,0x98,0x47,0x00,0x20,0x38 ,0xbd,0x02,0x20,0x38,0xbd,0x00,0xbf,0x04,0x03,0x00,0x20,0x90,0x00,0x00,0x20,0x00,0x03,0x00,0x20,0x08,0xb5,0x06,0x4b,0x1a,0x68,0x53,0x7a,0x43,0xf0,0x20,0x03,0x53 ,0x72,0x04,0x4b,0x1b,0x68,0xdb,0x69,0x98,0x47,0x00,0x20,0x08,0xbd,0x00,0xbf,0x04,0x03,0x00,0x20,0x00,0x03,0x00,0x20,0x05,0x4b,0x10,0xb5,0x1c,0x68,0x62,0x8a,0x18 ,0xb9,0x8b,0x88,0x9b,0x1a,0x23,0x82,0x10,0xbd,0x08,0x68,0x10,0x44,0x10,0xbd,0x04,0x03,0x00,0x20,0x08,0xb5,0x0b,0x4b,0x00,0x20,0x93,0xf8,0x30,0x10,0xff,0xf7,0x23 ,0xfd,0x09,0x4b,0x1b,0x68,0x18,0x7a,0x08,0x28,0x06,0xd1,0x07,0x4b,0x4f,0xf4,0x80,0x52,0x1a,0x80,0x06,0x4b,0x10,0x22,0x1a,0x80,0xa0,0xf1,0x09,0x03,0x58,0x42,0x58 ,0x41,0x08,0xbd,0x00,0x00,0x00,0x20,0x04,0x03,0x00,0x20,0xd2,0x02,0x00,0x20,0xd4,0x02,0x00,0x20,0x73,0xb5,0x9d,0x4d,0x9d,0x4e,0x2b,0x68,0x31,0x68,0x1a,0x7a,0x09 ,0x2a,0x13,0xd0,0x9b,0x4a,0x89,0xb2,0x0a,0x44,0x52,0x00,0x12,0x88,0x52,0x00,0x02,0xf1,0x80,0x42,0x02,0xf5,0xc0,0x42,0x11,0x78,0x19,0x70,0x51,0x78,0x59,0x70,0x91 ,0x88,0x59,0x80,0x11,0x89,0x99,0x80,0x92,0x89,0xda,0x80,0x01,0x22,0x1a,0x72,0xda,0x88,0x5c,0x78,0x00,0x2a,0x59,0xd1,0x1a,0x78,0x12,0xf0,0x7f,0x02,0x3b,0xd1,0x09 ,0x2c,0x02,0xd1,0xff,0xf7,0xae,0xfe,0x45,0xe0,0x05,0x2c,0x10,0xd1,0x93,0xf9,0x02,0x20,0x00,0x2a,0x01,0xda,0x08,0x23,0x45,0xe0,0xda,0x78,0x00,0x2a,0xfa,0xd1,0x9a ,0x88,0x00,0x2a,0xf7,0xd1,0x9b,0x7a,0x00,0x2b,0x00,0xf0,0x19,0x81,0xf2,0xe7,0x03,0x2c,0x13,0xd1,0x9a,0x78,0x01,0x2a,0x07,0xd0,0x7f,0x4b,0x20,0x46,0x1b,0x68,0x5b ,0x69,0x98,0x47,0x03,0x28,0x2a,0xd1,0x2c,0xe0,0x9a,0x88,0x00,0x2a,0xf4,0xd1,0x5b,0x7a,0x98,0x06,0xf1,0xd5,0xff,0xf7,0x6d,0xff,0x1c,0xe0,0x01,0x2c,0xec,0xd1,0x9a ,0x78,0x01,0x2a,0xe9,0xd1,0x9a,0x88,0x00,0x2a,0xe6,0xd1,0x5b,0x7a,0x99,0x06,0xe3,0xd5,0xff,0xf7,0xb7,0xfe,0x0e,0xe0,0x01,0x2a,0x04,0xd1,0x0b,0x2c,0xdc,0xd1,0xff ,0xf7,0x8c,0xfe,0x07,0xe0,0x02,0x2a,0xd7,0xd1,0x01,0x2c,0xf1,0xd0,0x03,0x2c,0xd3,0xd1,0xff,0xf7,0x0d,0xff,0x00,0x28,0x00,0xf0,0xe2,0x80,0xcd,0xe7,0x00,0x28,0xb9 ,0xd1,0xdd,0xe0,0x09,0x23,0x2a,0x68,0x13,0x72,0xd5,0xe0,0x06,0x2c,0x1a,0xd1,0x1a,0x78,0x52,0x06,0x40,0xf0,0xe2,0x80,0xda,0x78,0x5f,0x4b,0x01,0x2a,0x02,0xd1,0x1b ,0x68,0xdb,0x69,0x76,0xe0,0x02,0x2a,0x02,0xd1,0x1b,0x68,0x1b,0x6a,0x71,0xe0,0x03,0x2a,0x02,0xd1,0x1b,0x68,0x5b,0x6a,0x6c,0xe0,0x21,0x2a,0x40,0xf0,0xce,0x80,0x1b ,0x68,0x9b,0x6a,0x66,0xe0,0x00,0x2c,0x40,0xd1,0x59,0x88,0x00,0x29,0x40,0xf0,0xc5,0x80,0x5a,0x68,0x22,0xf0,0xff,0x02,0xb2,0xf5,0x00,0x3f,0x40,0xf0,0xbe,0x80,0x1a ,0x78,0x12,0xf0,0x7f,0x02,0x04,0xd1,0x9b,0x88,0x00,0x2b,0x00,0xf0,0xb4,0x80,0xb4,0xe0,0x01,0x2a,0x0a,0xd1,0x48,0x4a,0x18,0x79,0x12,0x68,0x92,0x69,0x90,0x47,0x00 ,0x28,0x40,0xf0,0xab,0x80,0x2b,0x68,0x9b,0x7a,0x1b,0xe0,0x02,0x2a,0x40,0xf0,0xa5,0x80,0x1a,0x79,0x41,0x48,0x02,0xf0,0x0f,0x01,0x8b,0x00,0x03,0xf1,0x80,0x43,0x03 ,0xf5,0xb8,0x43,0x1b,0x68,0x00,0x78,0x12,0xf0,0x80,0x0f,0x14,0xbf,0x03,0xf0,0x30,0x03,0x03,0xf4,0x40,0x53,0x81,0x42,0x80,0xf0,0x90,0x80,0x12,0xf0,0x70,0x0f,0x40 ,0xf0,0x8c,0x80,0x00,0x2b,0x40,0xf0,0x87,0x80,0x87,0xe0,0x08,0x2c,0x05,0xd1,0x1b,0x78,0x5b,0x06,0x40,0xf0,0x82,0x80,0x31,0x4b,0x1d,0xe0,0x0a,0x2c,0x7d,0xd1,0x1a ,0x78,0x02,0xf0,0x7f,0x02,0x01,0x2a,0x78,0xd1,0x9a,0x7a,0x00,0x2a,0x75,0xd0,0x59,0x88,0x00,0x29,0x72,0xd1,0x5a,0x68,0x22,0xf0,0xff,0x02,0xb2,0xf5,0x80,0x3f,0x6c ,0xd1,0x25,0x4a,0x18,0x79,0x12,0x68,0x92,0x69,0x90,0x47,0x00,0x28,0x65,0xd1,0x24,0x4b,0x01,0xe0,0x00,0x2b,0x61,0xd0,0x2a,0x68,0x00,0x24,0x54,0x82,0x93,0x61,0x20 ,0x46,0x98,0x47,0x20,0x46,0x4f,0xf6,0xff,0x71,0x2b,0x68,0x1a,0x8a,0x8a,0x42,0x01,0xd1,0x09,0x22,0x03,0xe0,0x02,0x28,0x00,0xd0,0x12,0xb9,0x08,0x22,0x1a,0x72,0x3a ,0xe0,0x93,0xf9,0x00,0x10,0x00,0x29,0x30,0xda,0xd9,0x88,0x12,0x4c,0x01,0x91,0x01,0x98,0x82,0x42,0x02,0xd9,0x01,0x9a,0x1a,0x82,0x10,0xe0,0x8a,0x42,0x0e,0xd2,0x21 ,0x68,0x91,0xf8,0x30,0x00,0x82,0x42,0x01,0xd2,0x00,0x21,0x05,0xe0,0x92,0xfb,0xf0,0xf1,0x00,0xfb,0x11,0x22,0x12,0xb9,0x01,0x21,0x0b,0x4a,0x11,0x70,0x22,0x68,0x92 ,0xf8,0x30,0x20,0x9a,0x82,0xff,0xf7,0x47,0xfd,0x15,0xe0,0x04,0x03,0x00,0x20,0x50,0x5c,0x00,0x40,0x04,0x30,0x00,0x20,0xdc,0x02,0x00,0x20,0x90,0x00,0x00,0x20,0xa1 ,0x10,0x00,0x08,0xc5,0x10,0x00,0x08,0x24,0x0b,0x00,0x20,0x03,0x22,0x1a,0x72,0x10,0x4b,0x4f,0xf4,0x40,0x52,0x1a,0x80,0xff,0xf7,0x8c,0xfe,0x02,0xb0,0x70,0xbd,0x32 ,0x68,0x0d,0x4b,0x92,0xb2,0x13,0x44,0x5b,0x00,0x00,0x22,0x1a,0x60,0x0b,0x4b,0x30,0x22,0x1a,0x80,0x06,0x23,0x16,0xe7,0x09,0x4b,0x9d,0xe7,0x09,0x4b,0x2a,0x68,0x1b ,0x68,0x50,0x78,0x1b,0x69,0x98,0x47,0x03,0x28,0x9c,0xd1,0x06,0x4b,0x1b,0x68,0x9f,0xe7,0x00,0xbf,0xd2,0x02,0x00,0x20,0x02,0x30,0x00,0x20,0xd4,0x02,0x00,0x20,0xe9 ,0x10,0x00,0x08,0xdc,0x02,0x00,0x20,0x04,0x03,0x00,0x20,0xf8,0xb5,0x2a,0x4d,0x2c,0x68,0x23,0x7a,0x03,0x2b,0x01,0xd0,0x05,0x2b,0x3f,0xd1,0xa1,0x69,0x26,0x8a,0xa9 ,0xb1,0xa6,0xb1,0xa3,0x8a,0x9e,0x42,0x28,0xbf,0x1e,0x46,0x30,0x46,0x88,0x47,0x23,0x8a,0x07,0x46,0x9b,0x1b,0x23,0x82,0x63,0x8a,0x00,0x20,0x33,0x44,0x63,0x82,0xff ,0xf7,0xb0,0xfb,0x32,0x46,0x01,0x46,0x38,0x46,0x00,0xf0,0x9d,0xf8,0x23,0x8a,0x53,0xb1,0x1a,0x4b,0x00,0x21,0x4f,0xf4,0x40,0x52,0x08,0x46,0x1a,0x80,0xff,0xf7,0x55 ,0xfb,0x17,0x4b,0x30,0x22,0x1a,0x80,0xa3,0x8a,0x22,0x8a,0x93,0x42,0x2b,0x68,0x01,0xd8,0x03,0x22,0x01,0xe0,0x12,0xb1,0x05,0x22,0x1a,0x72,0x0b,0xe0,0x06,0x21,0x19 ,0x72,0x10,0x4b,0x19,0x68,0x10,0x4b,0x89,0xb2,0x0b,0x44,0x5b,0x00,0x1a,0x60,0x0b,0x4b,0x30,0x22,0x1a,0x80,0x2b,0x68,0x1b,0x7a,0x06,0xe0,0x07,0x2b,0x03,0xd1,0x0a ,0x4b,0x1b,0x68,0xdb,0x68,0x98,0x47,0x08,0x23,0x2a,0x68,0x13,0x72,0xbd,0xe8,0xf8,0x40,0xff,0xf7,0x0f,0xbe,0x00,0xbf,0x04,0x03,0x00,0x20,0xd2,0x02,0x00,0x20,0xd4 ,0x02,0x00,0x20,0x50,0x5c,0x00,0x40,0x02,0x30,0x00,0x20,0xdc,0x02,0x00,0x20,0x30,0xb5,0x0b,0x4b,0x00,0x22,0x1c,0x78,0xa2,0x42,0x0c,0xd2,0x48,0xf6,0x8f,0x71,0x02 ,0xf1,0x80,0x53,0x03,0xf5,0xb8,0x53,0x9b,0x00,0x1d,0x68,0x29,0x40,0x11,0x43,0x19,0x60,0x01,0x32,0xf0,0xe7,0x03,0x4b,0x40,0xf0,0x80,0x00,0x18,0x60,0x30,0xbd,0x90 ,0x00,0x00,0x20,0x4c,0x5c,0x00,0x40,0x10,0xb5,0x13,0x4c,0x23,0x68,0x1a,0x7a,0x02,0x2a,0x01,0xd0,0x04,0x2a,0x04,0xd1,0xff,0xf7,0x7e,0xfc,0x23,0x68,0x1b,0x7a,0x13 ,0xe0,0x06,0x2a,0x10,0xd1,0x5a,0x78,0x05,0x2a,0x09,0xd1,0x1a,0x78,0x52,0x06,0x06,0xd1,0x98,0x78,0xff,0xf7,0xcc,0xff,0x08,0x4b,0x1b,0x68,0x1b,0x6a,0x98,0x47,0x07 ,0x4b,0x1b,0x68,0x9b,0x68,0x98,0x47,0x08,0x23,0x22,0x68,0x13,0x72,0xbd,0xe8,0x10,0x40,0xff,0xf7,0xbf,0xbd,0x00,0xbf,0x04,0x03,0x00,0x20,0x00,0x03,0x00,0x20,0xdc ,0x02,0x00,0x20,0x10,0xb5,0x01,0xf1,0x00,0x51,0x01,0x32,0x01,0xf5,0x40,0x51,0x52,0x10,0x49,0x00,0x00,0x23,0x9a,0x42,0x05,0xd0,0x30,0xf8,0x02,0x4b,0x21,0xf8,0x23 ,0x40,0x01,0x33,0xf7,0xe7,0x10,0xbd,0x10,0xb5,0x01,0xf1,0x00,0x51,0x01,0x32,0x01,0xf5,0x40,0x51,0x52,0x10,0x49,0x00,0x00,0x23,0x9a,0x42,0x05,0xd0,0x51,0xf8,0x23 ,0x40,0x20,0xf8,0x13,0x40,0x01,0x33,0xf7,0xe7,0x10,0xbd,0x51,0x04,0x00,0x08,0x65,0x01,0x00,0x08,0xd9,0x02,0x00,0x08,0xdb,0x02,0x00,0x08,0x0d,0x02,0x00,0x08,0xb1 ,0x02,0x00,0x08,0x33,0x01,0x00,0x08,0x6d,0x02,0x00,0x08,0x79,0x02,0x00,0x08,0x85,0x02,0x00,0x08,0xa5,0x02,0x00,0x08,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xd7 ,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7 ,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xd7,0x02,0x00,0x08,0xdd,0x02,0x00,0x08,0x3d,0x01,0x00,0x08,0xdf ,0x02,0x00,0x08,0xe1,0x02,0x00,0x08,0xe3,0x02,0x00,0x08,0xe5,0x02,0x00,0x08,0xd5,0x02,0x00,0x08,0x55,0x01,0x00,0x08,0x59,0x01,0x00,0x08,0x01,0x01,0x00,0x00,0xe8 ,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x32,0x01,0x00,0x20,0x12,0x00,0x00,0x00,0x4c,0x01,0x00,0x20,0x14,0x00,0x00,0x00,0x19,0x01,0x00,0x20,0x10,0x00,0x00,0x00,0x60 ,0x01,0x00,0x20,0x80,0x00,0x00,0x00,0xe0,0x01,0x00,0x20,0x6c,0x00,0x00,0x00,0x4c,0x02,0x00,0x20,0x6c,0x00,0x00,0x00,0x12,0x01,0x00,0x01,0x00,0x00,0x00,0x40,0xaf ,0x1e,0x03,0x00,0x01,0x02,0x01,0x02,0x03,0x01,0x00,0x00,0x29,0x01,0x00,0x20,0x09,0x00,0x00,0x00,0x04,0x03,0x09,0x04,0x09,0x02,0x2d,0x00,0x01,0x01,0x00,0x80,0x32 ,0x09,0x04,0x00,0x00,0x00,0xfe,0x01,0x02,0x04,0x09,0x04,0x00,0x01,0x00,0xfe,0x01,0x02,0x05,0x09,0x04,0x00,0x02,0x00,0xfe,0x01,0x02,0x06,0x09,0x21,0x03,0xff,0x00 ,0x00,0x08,0x10,0x01,0x10,0x03,0x4c,0x00,0x4c,0x00,0x4d,0x00,0x20,0x00,0x30,0x00,0x30,0x00,0x33,0x00,0x09,0x21,0x03,0xff,0x00,0x00,0x08,0x10,0x01,0x12,0x03,0x4c ,0x00,0x65,0x00,0x61,0x00,0x66,0x00,0x4c,0x00,0x61,0x00,0x62,0x00,0x73,0x00,0xcc,0x00,0x00,0x20,0x12,0x00,0x00,0x00,0x14,0x03,0x4d,0x00,0x61,0x00,0x70,0x00,0x6c ,0x00,0x65,0x00,0x20,0x00,0x30,0x00,0x30,0x00,0x33,0x00,0x80,0x03,0x53,0x00,0x54,0x00,0x4d,0x00,0x33,0x00,0x32,0x00,0x64,0x00,0x75,0x00,0x69,0x00,0x6e,0x00,0x6f ,0x00,0x20,0x00,0x62,0x00,0x6f,0x00,0x6f,0x00,0x74,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x76,0x00,0x31,0x00,0x2e,0x00,0x30 ,0x00,0x20,0x00,0x20,0x00,0x45,0x00,0x52,0x00,0x52,0x00,0x4f,0x00,0x52,0x00,0x2e,0x00,0x20,0x00,0x55,0x00,0x70,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x20 ,0x00,0x74,0x00,0x6f,0x00,0x20,0x00,0x52,0x00,0x41,0x00,0x4d,0x00,0x20,0x00,0x6e,0x00,0x6f,0x00,0x74,0x00,0x20,0x00,0x73,0x00,0x75,0x00,0x70,0x00,0x70,0x00,0x6f ,0x00,0x72,0x00,0x74,0x00,0x65,0x00,0x64,0x00,0x2e,0x00,0x6c,0x03,0x53,0x00,0x54,0x00,0x4d,0x00,0x33,0x00,0x32,0x00,0x64,0x00,0x75,0x00,0x69,0x00,0x6e,0x00,0x6f ,0x00,0x20,0x00,0x62,0x00,0x6f,0x00,0x6f,0x00,0x74,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x20,0x00,0x76,0x00,0x31,0x00,0x2e,0x00,0x30 ,0x00,0x20,0x00,0x20,0x00,0x55,0x00,0x70,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x20,0x00,0x74,0x00,0x6f,0x00,0x20,0x00,0x46,0x00,0x6c,0x00,0x61,0x00,0x73 ,0x00,0x68,0x00,0x20,0x00,0x30,0x00,0x78,0x00,0x38,0x00,0x30,0x00,0x30,0x00,0x35,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x6c,0x03,0x53,0x00,0x54,0x00,0x4d,0x00,0x33 ,0x00,0x32,0x00,0x64,0x00,0x75,0x00,0x69,0x00,0x6e,0x00,0x6f,0x00,0x20,0x00,0x62,0x00,0x6f,0x00,0x6f,0x00,0x74,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x65 ,0x00,0x72,0x00,0x20,0x00,0x76,0x00,0x31,0x00,0x2e,0x00,0x30,0x00,0x20,0x00,0x20,0x00,0x55,0x00,0x70,0x00,0x6c,0x00,0x6f,0x00,0x61,0x00,0x64,0x00,0x20,0x00,0x74 ,0x00,0x6f,0x00,0x20,0x00,0x46,0x00,0x6c,0x00,0x61,0x00,0x73,0x00,0x68,0x00,0x20,0x00,0x30,0x00,0x78,0x00,0x38,0x00,0x30,0x00,0x30,0x00,0x32,0x00,0x30,0x00,0x30 ,0x00,0x30,0x00,0xec,0x00,0x00,0x20,0x2d,0x00,0x00,0x00,0x00,0x50,0x00,0x20,0x00,0x0c,0x00,0x20}; #define BOARD_LED_PIN 33 typedef struct { volatile uint32 CR; volatile uint32 CFGR; volatile uint32 CIR; volatile uint32 APB2RSTR; volatile uint32 APB1RSTR; volatile uint32 AHBENR; volatile uint32 APB2ENR; volatile uint32 APB1ENR; volatile uint32 BDCR; volatile uint32 CSR; } RCC_RegStruct; typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus; typedef enum { DISABLE = 0, ENABLE = !DISABLE} FunctionalState; typedef enum { ERROR = 0, SUCCESS = !ERROR} ErrorStatus; #define BOOTLOADER_FLASH ((uint32)0x08000000) #define PAGE_SIZE 1024 #define SET_REG(addr,val) do { *(volatile uint32*)(addr)=val; } while(0) #define GET_REG(addr) (*(volatile uint32*)(addr)) #define RCC ((uint32)0x40021000) #define FLASH ((uint32)0x40022000) #define RCC_CR RCC #define RCC_CFGR (RCC + 0x04) #define RCC_CIR (RCC + 0x08) #define RCC_AHBENR (RCC + 0x14) #define RCC_APB2ENR (RCC + 0x18) #define RCC_APB1ENR (RCC + 0x1C) #define FLASH_ACR (FLASH + 0x00) #define FLASH_KEYR (FLASH + 0x04) #define FLASH_OPTKEYR (FLASH + 0x08) #define FLASH_SR (FLASH + 0x0C) #define FLASH_CR (FLASH + 0x10) #define FLASH_AR (FLASH + 0x14) #define FLASH_OBR (FLASH + 0x1C) #define FLASH_WRPR (FLASH + 0x20) #define OB_RDP (0x1FFFF800) #define FLASH_KEY1 0x45670123 #define FLASH_KEY2 0xCDEF89AB #define RDPRT_KEY ((uint16_t)0x00A5) #define FLASH_SR_BSY 0x01 #define FLASH_CR_PER 0x02 #define FLASH_CR_PG 0x01 #define FLASH_CR_START 0x40 #define FLASH_OPTER ((uint32_t)0x20) #define FLASH_OPTPG ((uint32_t)0x10) #define FLASH_RDPRT ((uint32_t)0x02) #define pRCC ((RCC_RegStruct *) RCC) void optUnlock() { //Option byte unlock /* unlock the flash */ SET_REG(FLASH_OPTKEYR, FLASH_KEY1); SET_REG(FLASH_OPTKEYR, FLASH_KEY2); } bool clearOptionByte () { optUnlock(); uint16 rdptmp = RDPRT_KEY; if (FLASH_OBR & FLASH_RDPRT) { rdptmp = 0x00; } uint32 rwmVal = GET_REG(FLASH_CR); rwmVal |= FLASH_OPTER; SET_REG(FLASH_CR, rwmVal); // rwmVal = GET_REG(FLASH_CR); rwmVal |= FLASH_CR_START; SET_REG(FLASH_CR, rwmVal); while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} rwmVal = GET_REG(FLASH_CR); rwmVal &= ~FLASH_OPTER; // SET_REG(FLASH_CR, rwmVal); // rwmVal = GET_REG(FLASH_CR); rwmVal |= FLASH_OPTPG; SET_REG(FLASH_CR, rwmVal); *(volatile uint16*) OB_RDP = rdptmp; while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} rwmVal = GET_REG(FLASH_CR); rwmVal &= ~FLASH_OPTPG; SET_REG(FLASH_CR, rwmVal); return true; } bool flashErasePage(uint32 pageAddr) { uint32 rwmVal = GET_REG(FLASH_CR); rwmVal = FLASH_CR_PER; SET_REG(FLASH_CR, rwmVal); while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} SET_REG(FLASH_AR, pageAddr); SET_REG(FLASH_CR, FLASH_CR_START | FLASH_CR_PER); while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} /* todo: verify the page was erased */ rwmVal = 0x00; SET_REG(FLASH_CR, rwmVal); return true; } bool flashErasePages(uint32 pageAddr, uint16 n) { while (n-- > 0) { if (!flashErasePage(pageAddr + 0x400 * n)) { return false; } } return true; } bool flashWriteWord(uint32 addr, uint32 word) { volatile uint16 *flashAddr = (volatile uint16 *)addr; volatile uint32 lhWord = (volatile uint32)word & 0x0000FFFF; volatile uint32 hhWord = ((volatile uint32)word & 0xFFFF0000) >> 16; uint32 rwmVal = GET_REG(FLASH_CR); SET_REG(FLASH_CR, FLASH_CR_PG); /* apparently we need not write to FLASH_AR and can simply do a native write of a half word */ while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} *(flashAddr + 0x01) = (volatile uint16)hhWord; while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} *(flashAddr) = (volatile uint16)lhWord; while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} rwmVal &= 0xFFFFFFFE; SET_REG(FLASH_CR, rwmVal); /* verify the write */ if (*(volatile uint32 *)addr != word) { return false; } return true; } void flashLock() { /* take down the HSI oscillator? it may be in use elsewhere */ /* ensure all FPEC functions disabled and lock the FPEC */ SET_REG(FLASH_CR, 0x00000080); } void flashUnlock() { /* unlock the flash */ SET_REG(FLASH_KEYR, FLASH_KEY1); SET_REG(FLASH_KEYR, FLASH_KEY2); } /* Minimum_Source*/ void setupFLASH() { /* configure the HSI oscillator */ if ((pRCC->CR & 0x01) == 0x00) { uint32 rwmVal = pRCC->CR; rwmVal |= 0x01; pRCC->CR = rwmVal; } /* wait for it to come on */ while ((pRCC->CR & 0x02) == 0x00) {} } bool writeChunk(uint32 *ptr, int size, const char *data) { flashErasePage((uint32)(ptr)); for (int i = 0; i < size; i = i + 4) { if (!flashWriteWord((uint32)(ptr++), *((uint32 *)(data + i)))) { return false; } } return true; } bool isNewBootloaderAlreadyInstalled() { char *existingBootloader = (char *) BOOTLOADER_FLASH; int bootloaderSize=sizeof(maple_mini_boot20); for(int i=0;i(maple_mini_boot20); int n = 0; bool alreadyInstalled = isNewBootloaderAlreadyInstalled(); pinMode(BOARD_LED_PIN, OUTPUT); Serial.begin(9600); // Wait for the user to open the serial window. while (!(Serial.isConnected() && (Serial.getDTR() ))) { digitalWrite(BOARD_LED_PIN, !digitalRead(BOARD_LED_PIN)); delay(1000); // Slow blink } if (alreadyInstalled) { Serial.print("Congratulations. You have already updated to this version of the bootloader"); while(1); } digitalWrite(BOARD_LED_PIN, LOW); Serial.println ("**************************************************************************************************"); Serial.println ("*** This sketch will update the bootloader in the Maple Mini to the STM32duino bootloader ****"); Serial.println ("*** With this you can use up to 120KB of Flash and 20KB of RAM for a Sketch ****"); Serial.println ("*** Uploading is also considerably faster on OSX (and possibly faster on Linux) ****"); Serial.println ("*** ****"); Serial.println ("*** Only use with Maple mini boards ****"); Serial.println ("*** ****"); Serial.println ("*** WARNING. If the update fails your Maple mini may not have a functional bootloder. ****"); Serial.println ("*** ****"); Serial.println ("*** YOU UPDATE AT YOUR OWN RISK ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("**************************************************************************************************"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** To confirm and proceed, enter Y ****"); Serial.println ("*** ****"); while (Serial.read() != 'Y') { delay(1); } Serial.println ("*** ****"); n = sizeof(maple_mini_boot20); setupFLASH(); flashUnlock(); int success = 1; int pages = n/PAGE_SIZE; int currentPage=1; for (int i = 0; i < n; i += PAGE_SIZE) { int size = 0; uint32* chunk = (uint32 *)(BOOTLOADER_FLASH + i); size = n - i; if (size > PAGE_SIZE) { size = PAGE_SIZE; } if (!writeChunk(chunk, size, &bootloader[i])) { Serial.println (); Serial.println ("*** WARNING, Update Failed!! It is possible that the flash memory is Write-protected. ****"); Serial.println ("*** ****"); Serial.println ("*** We can try clearing the option bytes. ****"); Serial.println ("*** After that, you will need to do a reset and try again. ****"); Serial.println ("*** If it still can not update after Read Protection may be enabled. ****"); Serial.println ("*** ****"); Serial.println ("**************************************************************************************************"); Serial.println ("*** ****"); Serial.println ("*** ****"); Serial.println ("*** To confirm and proceed, enter Y, to cancel power down now. ****"); Serial.println ("*** ****"); while (Serial.read() != 'Y') { delay(1); } if (clearOptionByte()) { Serial.println ("*** The option bytes have been cleared, reboot now and try to update again ****"); } success = 0; break; } Serial.print("Writing flash page ");Serial.print(currentPage++);Serial.print(" of ");Serial.println(pages+1); } if (success) { flashLock(); Serial.println (); Serial.println ("Update completed successfully. - Please test by uploading a different sketch"); while (1) { digitalWrite(BOARD_LED_PIN, LOW); delay(500); digitalWrite(BOARD_LED_PIN, HIGH); delay(500); } } } void loop(){}

Rogerclark
Ср 18 января 2017 г. 9:17
Спасибо, Виктор.

Фил 333
Ср 18 января 2017 г. 9:22
Я просто хотел дать отзыв, что метод @Stevestrong написал здесь дал мне эту ошибку:
================================================================
STM32Flash 0.5

http: // stm32flash.источник

Использование анализатора: необработанный двоичный файл
Не может обрабатывать устройство "com_8
Не удалось открыть порт: com_8
================================================================

Я использовал эту линию CMD, пока Maple_mini_boot20.Bin был в том же каталоге, что и STM32Flash.Exe:
STM32Flash.exe -w maple_mini_boot20.bin com_8

Теперь попробую метод @victor_pv


РЕДАКТИРОВАТЬ:

Эскиз Viktors дал мне первый раз:
********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

*** предупреждение, обновление не удалось!! Возможно, что флэш-память защищена записи. ****
*** ****
*** Мы можем попробовать очистить байты опции. ****
*** После этого вам нужно будет сделать сброс и попытаться снова ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите Y, чтобы отменить питание сейчас. ****
*** ****
*** Опции байты были очищены, перезагрузитесь сейчас и попробуйте снова обновить ****

Я принял оба вопроса с "Y".


После этого плата выглядит мертвым, и я должен поднять ее и заменить ее на USB-созет (нажатие сброса на плату не работает, а комплект отсутствует)

После того, как я заменил его на USB.

Стивестронг
Ср 18 января 2017 г. 10:02
Может быть, описание было не совсем ясным, но
@Phill333
Вы проверяли реальный порт связи в диспетчере устройств?

Ссылаясь на вики -сайт: Где com_xx - это порт Windows com e.глин. COM14 вашего USB -серийного устройства В вашем случае это должно быть Com8 (без подчеркивания).

Посмотрите на это время, какое сообщение об ошибке вы получаете, если вспышка написана.

Фил 333
Ср 18 января 2017 г. 10:47
О, хорошо, я не знал, что.
Я попробовал это с вашим предложением и получил это:

=============================
STM32Flash 0.5

http: // stm32flash.Sourceforge.сеть/

Использование анализатора: необработанный двоичный файл
Интерфейс serial_w32: 57600 8e1
Не удалось.
=============================


Я также попытался установить Baudrate на 115200 с "STM32Flash.exe -b 115200 -w maple_mini_boot20.bin com8 "и получил то же самое:

=============================
STM32Flash 0.5

http: // stm32flash.Sourceforge.сеть/

Использование анализатора: необработанный двоичный файл
Интерфейс serial_w32: 115200 8e1
Не удалось.
=============================


Я также попробовал его без подключения к Boot0 (PB8) и установил вручную (с сбросом и = 32) в режим последовательного загрузчика с той же ошибкой.

Стивестронг
Ср 18 января 2017 г. 12:26
Может случиться, что вспышка «защищена от записи». В этом случае Используйте эту утилиту Чтобы разблокировать вспышку. После разблокировки попробуйте загрузить загрузчик снова.

Для загрузки загрузчика, вы должны вручную подключить Boot0 (PB8) к 3.3V и Boot1 (PB2) к GND, иначе это не сработает.
После того, как вы это сделали, нажмите кнопку сброса. Затем попробуйте загрузить.

Фил 333
Ср 18 января 2017 г. 12:38
Это невозможно : D

Я подключился так
Maple Mini <------> USB<=>Серийный адаптер (CP2012)
Гнездо <------> Гнездо
Венчурной <------> 3.3В
RX1 (25) <------> Rx
TX1 (26) <------> Техас
Boot1 (2) <------> Гнездо
Boot2 (но) <------> 3.3В

После подключения адаптера (с подключенным кленовым mini). Никакого светодиода не включена, поэтому я думаю, что он в правильном режиме.
После использования «Утилита» (flash_loader_demo_v2.8.0.exe) Я всегда получаю ту же ошибку, что и опубликовано ранее (см. Приложение).

Стивестронг
Ср 18 января 2017 г. 12:51
Подключите Rx (Maple Mini) с TX (USB -серийным адаптером), так что в основном Exchange RX и TX.

И, кстати, нет Boot2, (но) это Boot0. И он подключен ко второй кнопке на плате, рядом с кнопкой «Сбросить».

Таким образом, вы можете просто подключить Boot1 (PIN 2 или PB2) к GND, а затем:
- Нажмите (но) кнопку и продолжайте нажать
- Нажмите кнопку «Сбросить»
- Кнопка «Сбросить» отпустить
- Подождите 1 секунду
- кнопка «Отпустить» (но).
Теперь вы можете загрузить загрузчик.

Фил 333
Ср 18 января 2017 г. 13:50
«Boot2» был опечатка и должен был быть Boot0.
И на моем последовательном адаптере TX должен быть подключен к TX.
Может быть, производитель подумал, что для идиотов было бы легко подключить его правильно : D

Метод с нажатием кнопки, нажатой, уже сделан, как я сказал (от здесь), но это было бы таким же, как ConnectInt the Boot0 и Boot1, как вы сказали.

Так что я все еще не могу загрузить загрузчик, потому что я уже сделал это :(

Стивестронг
Ср 18 января 2017 г. 13:57
Я могу дать вам только то же совет: Exchange RX и TX.

Фил 333
Ср 18 января 2017 г. 14:08
Неа. Это не сработало.

Но если я щелкну «Далее» в программе сразу после подключения адаптера (с Maple Mini) к USB, который работает (TX к TX и RX к RX... Я знаю эту проблему с момента моего начала Arduino : D ).

Так что еще одна вещь, чтобы обратить внимание, - это не слишком долго ждать (возможно, загрузчик блокируется или аналогичная проблема после слишком долгого ожидания?).

Я сейчас на этом экране и куда мне пойти?
Должен ли я «отключить защиту от записи», а затем попробовать Arduino Bootloader v2.0 эскиза?
Или я могу/должен ли «скачать» the maple_mini_boot20.Файл корзины?

victor_pv
Ср 18 января 2017 г. 14:49
Phil333 написал:Неа. Это не сработало.

Но если я щелкну «Далее» в программе сразу после подключения адаптера (с Maple Mini) к USB, который работает (TX к TX и RX к RX... Я знаю эту проблему с момента моего начала Arduino : D ).

Так что еще одна вещь, чтобы обратить внимание, - это не слишком долго ждать (возможно, загрузчик блокируется или аналогичная проблема после слишком долгого ожидания?).

Я сейчас на этом экране и куда мне пойти?
Должен ли я «отключить защиту от записи», а затем попробовать Arduino Bootloader v2.0 эскиза?
Или я могу/должен ли «скачать» the maple_mini_boot20.Файл корзины?

Стивестронг
Ср 18 января 2017 г. 15:18
Вы должны сбросить доску после Вы подключаете адаптер к USB, в противном случае плата снова сбрасывает, когда вы подключаете его к ПК.

Я бы просто отключил защиту от записи, а затем попробую загрузку загрузчика с утилитой STM32Flash.

Фил 333
Ср 18 января 2017 г., 17:02
Извините, Виктор, но после того, как я сделал шаги, которые я опубликовал ранее с помощью flash_loader_demo_v2.8.0.exe aka "Demongator gui" Доска выглядит мертвым на обычном USB -соединении с ПК.

Теперь я буду пытаться отключить защиту от записи через инструмент STM

victor_pv
Ср 18 января 2017 г., 17:51
Phil333 написал:Извините, Виктор, но после того, как я сделал шаги, которые я опубликовал ранее с помощью flash_loader_demo_v2.8.0.exe aka "Demongator gui" Доска выглядит мертвым на обычном USB -соединении с ПК.

Теперь я буду пытаться отключить защиту от записи через инструмент STM

Фил 333
Чт 19 января 2017 г., 6:18
Я не думаю, что выбрал «Стираю все», но я не уверен, потому что это велось, как я.
Я нажал на «Редактирование байтов Otopn» и сделал что -то там, и после того, как я не стал успешным, я сделал это снова с «отключенной защитой от записи».

После этого плата была мертва, и я прочитал, что вы обновили «заблокированный эскиз загрузчика» - так что я не повезло, я не мог проверить его и проверить, если он работает.
Но, как я вижу, есть ""; " Отсутствует в строке 342, так что это будет "FlashUnlock ()";

Следующее, что я сделал, это загрузка загрузчика в Maple Mini.
После этого светодиод снова вспыхивал (скриншот в наложении).

Поскольку мой компьютер не нашел его (Arduino IDE не показывал порт COM), я попытался вспыхивать новый эскиз для вашего обновления @victor_pv без выбранного порта, но с загрузчиком 2.0 выбрано.
Сначала он не сработал, затем я выбрал «Maple (Rev 3)», и он загрузил эскиз, но все еще не показал свой COM -порт.
Затем я снова выбрал «Maple Mini», и он снова остановил загрузку в точке, где мне пришлось сбросить плату вручную (кнопку сброса), чтобы соединить загрузку.
После этого порт COM снова показал, и я мог общаться с доской через серийный монитор.

Я получил сообщение "Поздравляю. Вы уже обновились до этой версии загрузчика ".

Так что это наконец работает : D


Но чтобы проверить ваш новый эскиз Viktor, я купил еще один Maple Mini у этого продавца и расскажу вам здесь (когда он прибудет - примерно через 3-4 недели), если ваш эскиз работает ;)

victor_pv
Чт 19 января 2017 г. 16:23
Phil333 написал:Я не думаю, что выбрал «Стираю все», но я не уверен, потому что это велось, как я.
Я нажал на «Редактирование байтов Otopn» и сделал что -то там, и после того, как я не стал успешным, я сделал это снова с «отключенной защитой от записи».

После этого плата была мертва, и я прочитал, что вы обновили «заблокированный эскиз загрузчика» - так что я не повезло, я не мог проверить его и проверить, если он работает.
Но, как я вижу, есть ""; " Отсутствует в строке 342, так что это будет "FlashUnlock ()";

Следующее, что я сделал, это загрузка загрузчика в Maple Mini.
После этого светодиод снова вспыхивал (скриншот в наложении).

Поскольку мой компьютер не нашел его (Arduino IDE не показывал порт COM), я попытался вспыхивать новый эскиз для вашего обновления @victor_pv без выбранного порта, но с загрузчиком 2.0 выбрано.
Сначала он не сработал, затем я выбрал «Maple (Rev 3)», и он загрузил эскиз, но все еще не показал свой COM -порт.
Затем я снова выбрал «Maple Mini», и он снова остановил загрузку в точке, где мне пришлось сбросить плату вручную (кнопку сброса), чтобы соединить загрузку.
После этого порт COM снова показал, и я мог общаться с доской через серийный монитор.

Я получил сообщение "Поздравляю. Вы уже обновились до этой версии загрузчика ".

Так что это наконец работает : D


Но чтобы проверить ваш новый эскиз Viktor, я купил еще один Maple Mini у этого продавца и расскажу вам здесь (когда он прибудет - примерно через 3-4 недели), если ваш эскиз работает ;)

Rogerclark
Чт 19 января 2017 г., 19:54
Можно помнить, что загрузчик не содержит код устройства последовательного компонента.
Он содержит только код загрузки DFU.

Вам нужно загрузить эскиз, который использует сериал, прежде чем вы увидите COM -порт.

victor_pv
Пт 20 января 2017 г. 3:48
Rogerclark написал:Можно помнить, что загрузчик не содержит код устройства последовательного компонента.
Он содержит только код загрузки DFU.

Вам нужно загрузить эскиз, который использует сериал, прежде чем вы увидите COM -порт.

Rogerclark
Пт 20 января 2017 г. 9:10
Спасибо, Виктор,

Можете ли вы перепостировать вам новую версию, чтобы я знаю, какой из них использовать

Фил 333
Пт 20 января 2017 г. 14:17
@Виктор:
Что ж, я уверен, что я сделал только «Редактировать варианты байтов», но не знал, что там делать, поэтому я вернулся и «Защита от написания в Dusable». Затем я начал снова и сделал «Загрузить на устройство» выбранный загрузчик.

Но чтобы добраться туда, мне пришлось «удалить защиту» до. Это было первое окно после подключения к устройству (снимки экрана выполнены и прикреплены).
01.png
01.PNG (27.32 киб) просмотрено 645 раз

Ахулл
Пт 20 января 2017 г. 14:35
Я подозреваю, что защита от записи включена только на первой странице (ы) Flash. Если бы это было не так, то было бы невозможно загрузить эскиз.

victor_pv
Пт 20 января 2017 г. 15:05
Ахулл написал:Я подозреваю, что защита от записи включена только на первой странице (ы) Flash. Если бы это было не так, то было бы невозможно загрузить эскиз.

Фил 333
Сб 21 января 2017 г. 9:10
Поэтому я установлю защиту от записи для страницы 0-15 (1K каждый = 16K).

РЕДАКТИРОВАТЬ:

Итак, я сделал это и пропустил оригинальный загрузчик.
Я подтвердил, что это оригинальный, прошивая пример Blink Arduino.

Я загрузил эскиз тебя @viktor, но снова получу эту массацию:
********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

*** предупреждение, обновление не удалось!! Возможно, что флэш-память защищена записи. ****
*** ****
*** Мы можем попробовать очистить байты опции. ****
*** После этого вам нужно будет сделать сброс и попытаться снова ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите Y, чтобы отменить питание сейчас. ****
*** ****
*** Опции байты были очищены, перезагрузитесь сейчас и попробуйте снова обновить ****

Если я теперь просто сбрось доски через его кнопку, я не могу общаться с ней через серийный монитор.
Если я отключаюсь и полностью заменяю устройство, то я могу общаться, но он начинается с той же точки и дает те же сообщения через последовательный монитор...

victor_pv
Солнце 22 января 2017 г. 18:40
Phil333 написал:Поэтому я установлю защиту от записи для страницы 0-15 (1K каждый = 16K).

РЕДАКТИРОВАТЬ:

Итак, я сделал это и пропустил оригинальный загрузчик.
Я подтвердил, что это оригинальный, прошивая пример Blink Arduino.

Я загрузил эскиз тебя @viktor, но снова получу эту массацию:
********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

*** предупреждение, обновление не удалось!! Возможно, что флэш-память защищена записи. ****
*** ****
*** Мы можем попробовать очистить байты опции. ****
*** После этого вам нужно будет сделать сброс и попытаться снова ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите Y, чтобы отменить питание сейчас. ****
*** ****
*** Опции байты были очищены, перезагрузитесь сейчас и попробуйте снова обновить ****

Если я теперь просто сбрось доски через его кнопку, я не могу общаться с ней через серийный монитор.
Если я отключаюсь и полностью заменяю устройство, то я могу общаться, но он начинается с той же точки и дает те же сообщения через последовательный монитор...

Rogerclark
Солнце 22 января 2017 11:42
Возможно ли включить защиту чтения на Flash By Flash Page?
Я думал, что отключение защиты чтения была для всей вспышки, а также стирает ее, поэтому код, который там был там, нельзя было прочитать, так как он был стерт.

Я не могу понять, как вы могли бы иметь систему, в которой на каждой странице Flash была собственная защита чтения, если только каждая страница не может быть прочитана только по коду, работающему на этой странице, и я не думаю, что у STM32 есть функция, которая довольно так сложно.

В целом, похоже, что компания, которая загружает загрузчик, понятия не имеет, что делает загрузчик, и что устройство не должно быть прочитано защищено.

victor_pv
Пн 23 января 2017 г. 12:33
Rogerclark написал:Возможно ли включить защиту чтения на Flash By Flash Page?
Я думал, что отключение защиты чтения была для всей вспышки, а также стирает ее, поэтому код, который там был там, нельзя было прочитать, так как он был стерт.

Я не могу понять, как вы могли бы иметь систему, в которой на каждой странице Flash была собственная защита чтения, если только каждая страница не может быть прочитана только по коду, работающему на этой странице, и я не думаю, что у STM32 есть функция, которая довольно так сложно.

В целом, похоже, что компания, которая загружает загрузчик, понятия не имеет, что делает загрузчик, и что устройство не должно быть прочитано защищено.

victor_pv
Пн 23 января 2017 г. 12:37
Phil333 написал:Поэтому я установлю защиту от записи для страницы 0-15 (1K каждый = 16K).

РЕДАКТИРОВАТЬ:

Итак, я сделал это и пропустил оригинальный загрузчик.
Я подтвердил, что это оригинальный, прошивая пример Blink Arduino.

Я загрузил эскиз тебя @viktor, но снова получу эту массацию:
********************************************* **********************************************
*** Этот эскиз обновит загрузчик в Maple Mini для загрузчика STM32Duino ****
*** С этим вы можете использовать до 120 КБ вспышки и 20 КБ ОЗУ для эскиза ****
*** Загрузка также значительно быстрее на OSX (и, возможно, быстрее на Linux) ****
*** ****
*** Использовать только с Maple Mini Boards ****
*** ****
*** ПРЕДУПРЕЖДЕНИЕ. Если обновление не удалось, ваш Maple Mini может не иметь функционального загрузки. ****
*** ****
*** Вы обновляете свой собственный риск ****
*** ****
*** ****
*** ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите y ****
*** ****
*** ****

*** предупреждение, обновление не удалось!! Возможно, что флэш-память защищена записи. ****
*** ****
*** Мы можем попробовать очистить байты опции. ****
*** После этого вам нужно будет сделать сброс и попытаться снова ****
*** ****
********************************************* **********************************************
*** ****
*** ****
*** Чтобы подтвердить и продолжить, введите Y, чтобы отменить питание сейчас. ****
*** ****
*** Опции байты были очищены, перезагрузитесь сейчас и попробуйте снова обновить ****

Если я теперь просто сбрось доски через его кнопку, я не могу общаться с ней через серийный монитор.
Если я отключаюсь и полностью заменяю устройство, то я могу общаться, но он начинается с той же точки и дает те же сообщения через последовательный монитор...

Фил 333
Пн 23 января 2017 г., 7:05
Это дало мне ************************************************************************************************** *** This sketch will update the bootloader in the Maple Mini to the STM32duino bootloader **** *** With this you can use up to 120KB of Flash and 20KB of RAM for a Sketch **** *** Uploading is also considerably faster on OSX (and possibly faster on Linux) **** *** **** *** Only use with Maple mini boards **** *** **** *** WARNING. If the update fails your Maple mini may not have a functional bootloder. **** *** **** *** YOU UPDATE AT YOUR OWN RISK **** *** **** *** **** *** **** *** **** ************************************************************************************************** *** **** *** **** *** To confirm and proceed, enter Y **** *** **** *** **** *** WARNING, Update Failed!! It is possible that the flash memory is Write-protected. **** *** **** *** We can try clearing the option bytes. **** *** After that, you will need to do a reset and try again. **** *** If it still can not update after Read Protection may be enabled. **** *** **** ************************************************************************************************** *** **** *** **** *** To confirm and proceed, enter Y, to cancel power down now. **** *** ****

Rogerclark
Пн 23 января 2017 г. 22:16
Похоже, вся вспышка была прочитана защищена.

У вас нет выбора, кроме как стирать и перепрошать, используя USB -серийный адаптер или Stlink.

Продавец, должно быть, купил пустой Maple Mini, вспыхнул и прочитал защиту его. (Странная вещь, что нужно сделать)

Я замечаю, что список Aliexpress "больше не доступен"


@Виктор

Может ли обновление проверки на защиту чтения ?

Кажется немного странным, что изначально было возможно загрузить эскиз обновления, но теперь невозможно перезаписать его.

Возможно, STM32 знает, является ли флэш -страница пустой и позволяет загрузить, даже если установлена ​​защита чтения.
Но это звучит как небольшая лазейка безопасности, так как вы могли бы загрузить код, чтобы прочитать Flash в пустую страницу Flash, а затем каким -то образом обмануть код в запуск этого кода.

По аналогичной теме.
NRF51 имеет ошибку в его кремнии, которая позволяет некоторым функциям GDB работать на защищенных устройствах чтения.
В этом вы все еще можете читать и установить содержание регистров, включая ПК.

Таким образом, вы можете изменить компьютер и получить код во вспышке, чтобы запустить любую часть вспышки, и люди использовали эту лазейку, чтобы найти и одноэтажные инструкции и удалось прочитать содержимое защищенной вспышки.

Я кратко посмотрел на это, но у STM32, похоже, нет этой ошибки.
Поэтому я был бы удивлен, если бы вы могли прошить пустую страницу, если устройство будет считан защищенным

Фил 333
Вт 24 января 2017 г. 6:58 утра
Ну, как я установил защиту от записи на странице 0-15 и видел, что на любой странице не было никакой защиты чтения.

Теперь я пойду, чтобы Flash the Bootloader 2.0 снова через STM-Tool, когда Виктор сейчас кажется занятым ;)

victor_pv
Вторник 24 января 2017 г., 17:16
Phil333 написал:Ну, как я установил защиту от записи на странице 0-15 и видел, что на любой странице не было никакой защиты чтения.

Теперь я пойду, чтобы Flash the Bootloader 2.0 снова через STM-Tool, когда Виктор сейчас кажется занятым ;)

Фил 333
Ср 25 января 2017 г. 8:53
victor_pv написал:Phil333 написал:Ну, как я установил защиту от записи на странице 0-15 и видел, что на любой странице не было никакой защиты чтения.

Теперь я пойду, чтобы Flash the Bootloader 2.0 снова через STM-Tool, когда Виктор сейчас кажется занятым ;)

Стивестронг
Ср 25 января 2017 г. 9:51
Эта информация должна быть записана в вики.

Беннебой
Ср 25 января 2017 г. 13:50
Стивестронг написал:Эта информация должна быть записана в вики.

victor_pv
Ср 25 января 2017 г. 14:22
Phil333 написал:victor_pv написал:Phil333 написал:Ну, как я установил защиту от записи на странице 0-15 и видел, что на любой странице не было никакой защиты чтения.

Теперь я пойду, чтобы Flash the Bootloader 2.0 снова через STM-Tool, когда Виктор сейчас кажется занятым ;)

Ахулл
Ср 25 января 2017 г. 15:53
Bennehboy ​​написал:Стивестронг написал:Эта информация должна быть записана в вики.

Фил 333
Ср 25 января 2017 г., 17:50
@victor_pv не беспокойтесь, человек.

Я просто рад, что это сработало, и я даю вам хотя бы обратную связь (и видео), что это работает.
И я счастлив, что я не сумасшедший, потому что я был уверен, что сделал точно так же, но это не сработало раньше ;)

Большое спасибо, ребята!