Загрузчик поврежден при использовании потоковой передачи.CPP

Джонано
Солнце 07 мая 2017 г. 16:19
Я попытался запустить какой -нибудь пример кода из [здесь] (https: // github.com/jchristensen/exteepr ... eepromtest) . Пример включает в себя некоторый серийный код из [здесь] (http: // arduiniana.орг/библиотеки/потоковая передача/). Загрузка примера в STM32F103C8T6 прошла нормально, но загрузчик не перечислил после сброса USB. Силовой цикл и до сих пор нет радости. Попытка перезагрузить загрузчик сбой, так как устройство не было распознано с помощью Stlink и BMP. Boot0 был маршрутом для перезагрузителя загрузчика и повторение выше, когда эскиз был загружен. После удаления потоковой передачи <<* Ссылка на пример загруженного и управляемого нормального.

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

Стивестронг
Солнце 07 мая 2017 г. 16:25
Вы можете генерировать файл карты и проверить его.

Джонано
Солнце 07 мая 2017 г., 17:37
https: // pastebin.com/r0jaupqi

Я проверю это сейчас.

AG123
Солнце 07 мая 2017 г. 18:01
На STM32F103 есть (только) 20к ОЗ.эн. Рам мало, но, тем не менее, это может быть что -то другое, что приведет к тому, что он провалится, а не просто заканчивается память :ржу не могу:

Стивестронг
Солнце 07 мая 2017 г. 18:08
Чтобы проанализировать файл карты, вы можете использовать эту ссылку от Daniel: http: // danieleff.com/stm32/map_analizer/
или скачать amap.

Джонано
Солнце 07 мая 2017 8:10 вечера
2937 ИСПОЛЬЗОВАНИЕ / 20480 Общая оперативная память
16137 ИСПОЛЬЗОВАНИЕ / 122880 Общая вспышка

Джонано
Сб 20 мая 2017 г. 15:26
Интересно, если я пришел, заставьте только загрузчик.

AG123
Сб 20 мая 2017 г. 18:57
Просто некоторые мысли, проверьте свои сценарии LD, загляните в файл E.глин. Вы использовали bootloader_20.лд? В Arduino IDE это, вероятно, связано с выбором «версия загрузчика»
и для установки UART / JTAG / SWD (ST-Link) проверьте *Установить адрес* или, возможно, правильный сценарий LD. Я думаю, что некоторые установщики, вероятно, используют адреса ELF, которые в основном происходят в самих сценариях LD. я.эн. Сценарии LD используются для создания файла ELF (следовательно, будут иметь адреса сценариев LD), а затем при установке файла, определяющего файл ELF, этот адрес (который такой же, как и в используемом сценарии LD) находится там, где эскиз / Бинарный файл устанавливается.
/* * libmaple linker script for "Flash" builds. * * A Flash build puts .text (and .rodata) in Flash, and * .data/.bss/heap (of course) in SRAM, but offsets the sections by * enough space to store the Maple bootloader, which lives in low * Flash and uses low memory. */ /* * This pulls in the appropriate MEMORY declaration from the right * subdirectory of stm32/mem/ (the environment must call ld with the * right include directory flags to make this happen). Boards can also * use this file to use any of libmaple's memory-related hooks (like * where the heap should live). */ MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K rom (rx) : ORIGIN = 0x08002000, LENGTH = 120K } /* Provide memory region aliases for common.inc */ REGION_ALIAS("REGION_TEXT", rom); REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_RODATA", rom); /* Let common.inc handle the real work. */ INCLUDE common.inc

Рик Кимбалл
Сб 20 мая 2017 г. 9:11 вечера
AG123 написал:На STM32F103 есть (только) 20к ОЗ.эн. Рам мало, но, тем не менее, это может быть что -то другое, что приведет к тому, что он провалится, а не просто заканчивается память :ржу не могу:

ZMEMW16
Сб 20 мая 2017 г., 21:22
Если это программирование из IDE с ST Link ?
Не могли бы вы попробовать это ?
Подключите другое последовательное устройство, серийный блок USB, еще один микро, даже нано :)
Выберите его в мониторе порта
Программируйте Maple Mini через ST-Link, теперь это повторно вымер?
Стивен

AG123
Сб 20 мая 2017 г. 9:49 вечера
Спасибо, Рик, мне нужно было попробовать потоковую передачу.H, я бездумно использовал серийные.print () или сериал.println (), как я ошибочно предполагал, что использование этих шаблонов займет больше памяти : D

Rogerclark
Сб 20 мая 2017 г. 11:14
Адрес эскиза жестко кодируется в загрузчику (есть 2 возможных адреса начала 0x8002000 и 0x8005000), ни один из которых не будет перезагрузить загрузчик себя на синей таблетке)

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

Afik, невозможно защитить от кода, стирающего себя.

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

Затем прочитайте раздел Bootloader и сохраните в файл (используя Stlink или Serial)
Затем загрузите код оскорбления и запустите его.

Затем Readback раздел загрузчика и проведите двоичное сравнение, чтобы увидеть, развращаете ли вы загрузчик, и если да, то весь раздел теперь пуст.

AG123
Солнце 21 мая 2017 г. 1:35
Мне казалось, что ST-Link (JTAG/SWD) или UART участвуют в установке эскиза, ошибки E.глин. При выборе сценария LD может привести к перезагрузке загрузчика.
Помимо написания кодов, которые взаимодействуют с контроллером Flash, который включает в себя использование специальных регистров, стирание блоков и написание новых блоков, кажется маловероятным, что «нормальный» эскиз делает это :?
всего 2 цента

Rogerclark
Солнце 21 мая 2017 г. 6:58
AG123 написал:Мне казалось, что ST-Link (JTAG/SWD) или UART участвуют в установке эскиза, ошибки E.глин. При выборе сценария LD может привести к перезагрузке загрузчика.
Помимо написания кодов, которые взаимодействуют с контроллером Flash, который включает в себя использование специальных регистров, стирание блоков и написание новых блоков, кажется маловероятным, что «нормальный» эскиз делает это :?
всего 2 цента

Джонано
Солнце 21 мая 2017 г. 14:25
Спасибо всем за ваши ответы, я планирую работать через них сегодня.

@Rickkimball не могли бы вы опубликовать точную команду, которую вы использовали для сжигания загрузчика, у меня есть доступ к ST-Link и (ваш) BMP. Я использовал generic_boot20_pc13.корзина из репо Роджера. Я запускаю STM32duino на Mac и * думаю * Я первоначально сжег загрузчику, используя Win7. Я попробовал это несколько раз, прежде чем опубликовать свою первоначальную проблему.

Рик Кимбалл
Солнце 21 мая 2017 г. 14:48
@Johno

Я использовал Stlink для загрузки загрузчика. Расположение вашего каталога STM32Duino отличается от корректировки для вашей конфигурации:
$/home/kimballr/arduino/hardware/stm32duino_maple/tools/linux/stlink/st-flash write generic_boot20_pc13.Bin 0x08000000

Джонано
Солнце 21 мая 2017 г. 15:06
Спасибо, Рик, я использовал одну и ту же команду на Mac, с другим путем.

Джонано
Солнце 21 мая 2017 г. 16:16
Я попробовал тестовый код потокового теста, предоставленный RIK, и все работает нормально. Однако, когда я использую исходный пример кода:
//Test extEEPROM library. //Writes the EEPROM full of 32-bit integers and reads them back to verify. //Wire a button from digital pin 6 to ground, this is used as a start button //so the sketch doesn't do unnecessary EEPROM writes every time it's reset. //Jack Christensen 09Jul2014 #include //http://github.com/JChristensen/extEEPROM/tree/dev #include //http://arduiniana.org/libraries/streaming/ #include //http://arduino.cc/en/Reference/Wire //Two 24LC256 EEPROMs on the bus const uint32_t totalKBytes = 64; //for read and write test functions extEEPROM eep(kbits_256, 2, 64); //device size, number of devices, page size const uint8_t btnStart = 6; //start button void setup(void) { pinMode(btnStart, INPUT_PULLUP); Serial.begin(115200); uint8_t eepStatus = eep.begin(extEEPROM::twiClock400kHz); //go fast! if (eepStatus) { Serial << endl << F("extEEPROM.begin() failed, status = ") << eepStatus << endl; while (1); } Serial << endl << F("Press button to start...") << endl; while (digitalRead(btnStart) == HIGH) delay(10); //wait for button push uint8_t chunkSize = 64; //this can be changed, but must be a multiple of 4 since we're writing 32-bit integers // eeErase(chunkSize, 0, totalKBytes * 1024 - 1); eeWrite(chunkSize); eeRead(chunkSize); dump(0, 16); //the first 16 bytes dump(32752, 32); //across the device boundary dump(65520, 16); //the last 16 bytes } void loop(void) { }

Джонано
Солнце 21 мая 2017 г. 16:18
Интересно, относится ли PIN 6 с портом SWD.

Рик Кимбалл
Солнце 21 мая 2017 г. 16:28
Джоно написал:BP не перечисляется после загрузки вышеуказанного кода. Еще одна обеспокоенность заключается в том, что режим SWD больше не доступен, если Boot0 не является высоким.
ST-Link Reports:

Рик Кимбалл
Солнце 21 мая 2017 г. 16:38
Джоно написал:Я попробовал тестовый код потокового теста, предоставленный RIK, и все работает нормально. Однако, когда я использую исходный пример кода:

Джонано
Солнце 21 мая 2017 г. 16:51
Хотя можно перепрофировать загрузчик с высоким уровнем Boot0, SWD без Boot0 не работает, пока не будет выполнена стирание с высоким уровнем Boot0. /usr/local/bin/st-flash erase

Джонано
Солнце 21 мая 2017 г. 16:55
Это действительно не перечисляется, я знаком с Linux DMESG и т. Д., На Mac я использую командную строку для перечисления устройств USB: Johns-MacBook-Pro:~ john$ lsusb Bus 026 Device 001: ID 8087:0024 Intel Corporation Hub Bus 026 Device 002: ID 05ac:8509 Apple Inc. FaceTime HD Camera (Built-in) Serial: CC2CA802BCDGFKL0 Bus 029 Device 001: ID 8087:0024 Intel Corporation Hub Bus 029 Device 002: ID 0424:2513 SMSC Hub Bus 029 Device 005: ID 05ac:0253 Apple Inc. Apple Internal Keyboard / Trackpad Bus 029 Device 003: ID 05ac:8242 Apple Inc. IR Receiver Bus 029 Device 004: ID 0a5c:4500 Broadcom Corp. BRCM20702 Hub Bus 029 Device 008: ID 05ac:821d Apple Inc. Bluetooth USB Host Controller Bus 020 Device 006: ID 1eaf:0003 1eaf Maple 003 Serial: LLM 003 Bus 000 Device 001: ID 1d6b:IPCI Linux Foundation USB 2.0 Bus Bus 000 Device 001: ID 1d6b:IPCI Linux Foundation USB 2.0 Bus Bus 000 Device 001: ID 1d6b:IPPT Linux Foundation USB 3.0 Bus Johns-MacBook-Pro:~ john$

Рик Кимбалл
Солнце 21 мая 2017 г. 16:59
Джоно написал:Это действительно не перечисляется, я знаком с Linux DMESG и т. Д., На Mac я использую командную строку для перечисления устройств USB: Johns-MacBook-Pro:~ john$ lsusb ... Bus 020 Device 006: ID 1eaf:0003 1eaf Maple 003 Serial: LLM 003 ...Johns-MacBook-Pro:~ john$

Джонано
Солнце 21 мая 2017 г., 17:02
После загрузки эскиза я вижу: Johns-MacBook-Pro:~ john$ lsusb Bus 026 Device 001: ID 8087:0024 Intel Corporation Hub Bus 026 Device 002: ID 05ac:8509 Apple Inc. FaceTime HD Camera (Built-in) Serial: CC2CA802BCDGFKL0 Bus 029 Device 001: ID 8087:0024 Intel Corporation Hub Bus 029 Device 002: ID 0424:2513 SMSC Hub Bus 029 Device 005: ID 05ac:0253 Apple Inc. Apple Internal Keyboard / Trackpad Bus 029 Device 003: ID 05ac:8242 Apple Inc. IR Receiver Bus 029 Device 004: ID 0a5c:4500 Broadcom Corp. BRCM20702 Hub Bus 029 Device 008: ID 05ac:821d Apple Inc. Bluetooth USB Host Controller Bus 000 Device 001: ID 1d6b:IPCI Linux Foundation USB 2.0 Bus Bus 000 Device 001: ID 1d6b:IPCI Linux Foundation USB 2.0 Bus Bus 000 Device 001: ID 1d6b:IPPT Linux Foundation USB 3.0 Bus Johns-MacBook-Pro:~ john$

AG123
Солнце 21 мая 2017 г., 17:04
Обычно эти вспышки поступают от загрузчика (DFU), попробуйте запустить dfu-util -l

Джонано
Солнце 21 мая 2017 г., 17:07
Johns-MacBook-Pro:~ john$ dfu-util -l dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Deducing device DFU version from functional descriptor length Found Runtime: [05ac:821d] ver=0154, devnum=8, cfg=1, intf=3, path="29-3", alt=0, name="UNKNOWN", serial="UNKNOWN"

Джонано
Солнце 21 мая 2017 г., 17:10
Johns-Macbook-Pro: ~ John $ lsusb
Шина 026 Устройство 001: ID 8087: 0024 Intel Corporation Hub
Шина 026 Устройство 002: ID 05AC: 8509 Apple Inc. FaceTime HD Camera (встроенная) Сериал: CC2CA802BCDGFKL0
Шина 029 Устройство 001: ID 8087: 0024 Intel Corporation Hub
Шина 029 Устройство 002: ID 0424: 2513 SMSC Hub
Шина 029 Устройство 005: ID 05AC: 0253 Apple Inc. Apple Внутренняя клавиатура / трекпад
Шина 029 Устройство 003: ID 05AC: 8242 Apple Inc. ИК -приемник
Шина 029 Устройство 004: ID 0A5C: 4500 Broadcom Corp. BRCM20702 Хаб
Шина 029 Устройство 008: ID 05AC: 821D Apple Inc. Bluetooth USB -хост -контроллер

Шина 020 Устройство 006: ID 1EAF: 0003 1EAF Maple 003 Сериал: LLM 003

Устройство шины 000 001: ID 1D6B: IPCI Linux Foundation USB 2.0 автобус
Устройство шины 000 001: ID 1D6B: IPCI Linux Foundation USB 2.0 автобус
Устройство шины 000 001: ID 1D6B: IPPT Linux Foundation USB 3.0 автобус

AG123
Солнце 21 мая 2017 г., 17:10
Будьте осторожны, это ваш Bus 029 Device 008: ID 05ac:821d Apple Inc. Bluetooth USB Host Controller

Джонано
Солнце 21 мая 2017 г., 17:13
Я не следую за тобой, я сделал другие наблюдения на USB http: // www.STM32duino.com/viewtopic.PHP ... 386#P28386.

Джонано
Солнце 21 мая 2017 г., 17:16
UMH, поэтому, когда я использую пример, который вы поставляете, он работает, как я ожидал, и когда я запускаю свой пример кода, он не. Он также приводит BP, чтобы предотвратить загрузчик, а также предотвращает нормальный доступ к SWD без Boot0.

Не могли бы вы загрузить мой пример кода в BP и проверить, есть ли у вас доступ к BP, когда он загружен?

AG123
Солнце 21 мая 2017 г., 17:19
Если вам нужна отладка в своем эскизе, позвоните в EnableBugports ();
http: // www.STM32duino.com/viewtopic.PHP ... 084#P27916 enableDebugPorts();

Джонано
Солнце 21 мая 2017 г., 17:30
С чистой стиранием и вспышкой "dfu -util -l" выглядит так: Johns-MacBook-Pro:~ john$ dfu-util -l dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Deducing device DFU version from functional descriptor length Found Runtime: [05ac:821d] ver=0154, devnum=8, cfg=1, intf=3, path="29-3", alt=0, name="UNKNOWN", serial="UNKNOWN" Found DFU: [1eaf:0003] ver=0201, devnum=28, cfg=1, intf=0, path="20-1", alt=2, name="STM32duino bootloader v1.0 Upload to Flash 0x8002000", serial="LLM 003" Found DFU: [1eaf:0003] ver=0201, devnum=28, cfg=1, intf=0, path="20-1", alt=1, name="STM32duino bootloader v1.0 Upload to Flash 0x8005000", serial="LLM 003" Found DFU: [1eaf:0003] ver=0201, devnum=28, cfg=1, intf=0, path="20-1", alt=0, name="STM32duino bootloader v1.0 ERROR. Upload to RAM not supported.", serial="LLM 003"

AG123
Солнце 21 мая 2017 г., 17:33
Вы можете установить эскиз с помощью dfu-util -a 2 -R -D sketch.bin

Рик Кимбалл
Солнце 21 мая 2017 г., 17:35
Джоно написал:UMH, поэтому, когда я использую пример, который вы поставляете, он работает, как я ожидал, и когда я запускаю свой пример кода, он не. Он также прикручивает BP, чтобы предотвратить загрузчик, а также предотвращает доступ к SWD.

Не могли бы вы загрузить мой пример кода в BP и проверить, есть ли у вас доступ к BP, когда он загружен?

Джонано
Солнце 21 мая 2017 г., 19:54
Спасибо @AG123 и @Rickkimball за вашу помощь и понимание.

@AG123 Я не думаю, что я еще достаточно знаю, чтобы попасть в варианты отладки, которые вы выделили.

@Rickkimball, я думаю, вы доказали потоковую передачу.H и, как вы говорите, я могу обойти проблему. Тем не менее, я, вероятно, буду продолжать грызть проблему, так как мне не нравится оставлять такие проблемы, как это, чтобы бродить бесплатно.

AG123
Пн 22 мая 2017 г., 3:11 утра
@Johno
Как я не знаю о вашей настройке отладки, я только предполагаю, что вы, возможно, делаете отладка, используя другую IDE (E.глин. затмение) или, возможно, некоторые сценарии или другая программа. Тем не менее, знайте, что некоторые реализации отладки загружают программу по JTAG/SWD непосредственно перед началом отладки.

Это перезаписывает эскиз, установленный с использованием DFU-UTIL (Arduino IDE).

Следовательно, вам нужно проверить настройку отладки, если вы можете предотвратить установку эскиза над JTAG/SWD во время отладки.
В качестве альтернативы, вам нужно установить свой * Установить адрес * для отладки для установки эскиза на правильном адресе e.глин. 0x8002000, а не 0x8000000, если отладка установите эскиз на 0x8000000, он просто будет перезагрузить загрузчик.

Джонано
Пн 22 мая 2017 г., 6:59
Спасибо, что придерживались меня @AG123. Я в настоящее время не использую какое -либо оборудование отладки/JTAG. Я довольно новичок в STM32Duino и использую Arduino 1.6.12 Связано через USB с BP под управлением загрузчика STM32Duino Bootloader. Загрузчик сжигается с использованием клона ST-Link. У меня есть другое оборудование, включая BMP, но пока они не были внесены в игру.

AG123
Пн 22 мая 2017 г. 12:04
Обратите внимание, что ST-Link является полностью способным устройством отладки JTAG/SWD, вы можете настроить OpenOCD и GDB и выполнять полную отладочную отладку JTAG/SWD, включая такие вещи, как мигание любых двоичных файлов (загрузочный загрузчик или любые наброски) в любых местах, установленные точки останова , исследуйте коды, регистры и т. Д
Следовательно, убедитесь, что вы знаете, что делаете при использовании ST-Link ;)

Arduino Ide