| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Программирование микроконтроллеров компании Fudan в Keil https://radiokot.ru/forum/viewtopic.php?f=59&t=200084 |
Страница 1 из 1 |
| Автор: | jcxz [ Ср дек 17, 2025 20:50:45 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Может кто-то имел дело с этими или похожими МК С этими МК и с Кейл дел не имел, но первое что бросается в глаза: почему "max.clock" стоит = 5kHz? Это очень мало. Я обычно ставлю не менее 4 МГц (хотя работаю с более старшими ядрами чем CM0).Также лучше сразу в начале отладочной сессии (ещё до всяких шаганий) ещё и своими глазами убедиться, что прошивка реально прошилась в чип (открыв окно "Memory", перейдя в нём на начало флешь и глазами сравнив данные там с содержимым своего файла прошивки). Добавлено after 5 minutes 34 seconds: По итогам того, к чему я пришел, при попытке отладки, отладчик запускается, но если сделать шаг выдает ошибку JLink - Cortex-M Error. Что может быть причиной данной ошибки? Что происходит после старта отладочной сессии? Показывает окошко с кодом и с точкой в которой сейчас находится PC? (остановленный)Причиной сбоев после загрузки может быть внезапно прилетевший на контроллер RESET. От WDT или по питанию или ещё от чего-то. Или какие-то другие проблемы с соединением эмулятора с отлаживаемым МК. Или с питанием. Программа судя по логу в в чип загружается Это лучше проверить своими глазами. По окошку "Memory".Тем более что и галки "Download to Flash" и "Verify Code Download" на последнем скрине у вас почему-то сняты. |
|
| Автор: | Zikon [ Чт дек 18, 2025 20:20:11 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
для начала поставь галки - так ![]()
|
|
| Автор: | Zikon [ Чт дек 18, 2025 20:46:29 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
что за белый кружок с красным крестиком, и зачем его в отладчике нажимать запускаем отладку и должен сразу на main() перейти и в си коде и в асм коде и дальше шагаем Добавлено after 2 minutes 36 seconds: шаги делаем и при изменении - жёлтая стрелочка перемещается синие регистры - те которые изменились при шаге или шагах может ещё зависит шаг в каком окне находишься и как-то си программу там шаги странно работают я больше асм отлаживаю немного в настройках можно в закладке Debug убрать галочку Run to main() тогда стартовать будет с ResetHandler и в асм окне будет если интересно асм по шагам смотреть и сейчас проще в телеге найти канал по MCU и там спрашивать на форумах мало движухи и отклик долгий |
|
| Автор: | jcxz [ Чт дек 18, 2025 22:56:45 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Zikon, сейчас при входе в отладчик сразу код идёт, или что, доступна кнопка STOP. После старта отладочной сессии, процессор должен по идее быть остановленным или в начале main() или по адресу вектора сброса. Не должен он быть в "run". Что-то не так тут. Может адрес точки входа (стартовый адрес прошивки) не задан или неправильно задан?Или выполнение по каким-то причинам не доходит от 0x165 до main()? У вас, судя по скриншоту с образом прошивки, вектор сброса указывает на адрес 0x165. Можно перед подключением отладчика, поставить на этот адрес бряк (в окне дизасма). И дальше прошагать до начала main(). Или же 2-й бряк поставить на начало main() и от адреса 0x165 до бряка в main() запустить CPU свободно бежать (run). Исполнение должно дойти до бряка в main(). Если не дошло - искать что не так со входом в main(). Вобщем - я бы плясал от адреса в векторе сброса (0x165). PS: В вашем МК флешь находится с адреса 0x00000000? Точно? Нужно убедиться в этом. У меня нет мануала на ваш МК - не знаю. Добавлено after 5 minutes 42 seconds: Шаги не делает, а если нажать Run to cursor line опять запускается и всё. [url=https://img.radiokot.ru/files/157349/medium/3y0m8xiqr8.png] А зачем вы закомментировали весь код внутри main()? Оставьте там хоть сколько-то кода. Может "run to main" не срабатывает, если main() пустой?
|
|
| Автор: | jcxz [ Пт дек 19, 2025 19:13:16 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
jcxz, когда я вхожу в дебаггер желтая стрелка уже сразу почему то стоит на while(1) "Жёлтая стрелка" это видимо где должно идти выполнение кода. Но в окне слева у вас в регистре PC=0, хотя если CPU действительно выполняет команду по адресу 0x236, то должно быть PC=0x236.И в остальных регистрах почему-то 0. Не должно быть такого. Тем более что SP однозначно должен указывать на стек (RAM), а не на flash как у вас. К тому же вы скрыли код до 0x236. Там есть код начала main()? Или что там? Вобщем - ваш отладчик показывает полную чушь (на последнем скриншоте). Советую также проверить реальность программирования флешь отдельно от Кейла. Запустите jflash.exe и проверьте содержимое флеши там. |
|
| Автор: | Zikon [ Пт дек 19, 2025 20:23:46 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
убери старт отладки с main() ( в настройках проекта вкладка Debug и убери галочку на "Run to main()" ) должен при входе в отладку начинать с адреса ResetHandler 0x00000164 и зачаем Stop нажимать ? Run что-ли нажал - зачем ? Есть же step - разные и правильно - если Run нажал - он у тебя в бесконечном цикле крутится - while(1) который Stop нажал - он там и выпал ! Где он должен быть то ещё ? Странно main с адреса 0x00000218 и до while какая-то инициализация идёт а листинг откуда ? |
|
| Автор: | trek1203 [ Сб дек 20, 2025 09:02:30 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Zikon, убирал run to main. Ничего не менялось. При входе в дебаггер он сразу стоит по тому Адресу что на картинке. И сразу почему то как будто запущен (как на скрине). Я run не нажимал.. так сразу, при входе в отладчик. Листинг с дизасеиблера отладчика |
|
| Автор: | jcxz [ Сб дек 20, 2025 14:22:30 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Zikon, убирал run to main. Ничего не менялось. При входе в дебаггер он сразу стоит по тому Он у вас как раз не стоит. (как сами же пишете) А CPU выполняет программу. А должен именно стоять после старта отладочной сессии. На начале main() или на адресе reset-вектора.Адресу что на картинке. Как будто что-то заставляет отладчик нажать "run" самостоятельно. Или как будто отладчик не видит точки входа программы. Интересно - а какой адрес фигурирует в .hex-файле в качестве стартового адреса программы? Это строка .hex-файла с типом =5. См.описание .hex: https://ru.wikipedia.org/wiki/Intel_HEX там ищем "32-битный адрес запуска программы в «линейном» адресном пространстве". Добавлено after 4 minutes 39 seconds: Странно main с адреса 0x00000218 Там как раз ничего странного: По reset-вектору сразу делается вызов SystemInit() (почему-то пустой, который только зачем-то записывает одно слово в начало ОЗУ и больше ничего не делает). А после выхода из SystemInit() выполняется си-стартап код. Который должен быть выполнен до входа в main(). Тут всё стандартно.и до while какая-то инициализация идёт Странно, что CPU проскакивает все эти адреса без остановки. Не останавливаясь ни на ResetHandler ни в начале main(). PS: Подозреваю что какая-то фигня в .elf-файле. Со старт-адресом программы. |
|
| Автор: | trek1203 [ Вс дек 21, 2025 13:19:17 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
jcxz, приведу целиком hex Код: :020000040000FA :1000000068100020650100006D0100006F01000014 :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000710100005E :1000300000000000000000007301000075010000D6 :1000400077010000770100007701000077010000D0 :1000500077010000770100007701000077010000C0 :1000600077010000770100007701000077010000B0 :1000700077010000770100007701000077010000A0 :100080007701000077010000000000007701000008 :100090007701000077010000770100007701000080 :1000A0007701000077010000770100007701000070 :1000B0007701000077010000770100007701000060 :1000C00000F002F800F03EF80CA030C80838241800 :1000D0002D18671EA246AB4654465D46AC4201D180 :1000E00000F030F87E460F3EB6460FCC0126334274 :1000F00000D0FB1A3343A246AB4618475801000014 :1001000078010000103A02D378C878C1FAD85207B3 :1001100001D330C830C101D504680C6070470000BD :100120000023002400250026103A01D378C1FBD813 :10013000520700D330C100D50B6070471FB51FBDFB :1001400010B510BD00F02DF81146FFF7F7FF00F0D5 :1001500063F800F045F803B4FFF7F2FF03BC00F0CA :100160004BF800000748804707480047FEE7FEE7D6 :10017000FEE7FEE7FEE7FEE704480549054A064BB1 :100180007047000009020000C10000006800002064 :100190006810002068080020680800207047704739 :1001A0007047754600F024F8AE4605006946534690 :1001B000C008C000854618B020B5FFF7DDFF60BC61 :1001C000B64600260027C0C5C0C5C0C5C0C5C0C54D :1001D000C0C5C0C5C0C5403D490849008D467047EF :1001E00010B50446C046C0462046FFF7B4FF10BD18 :1001F000004870470800002001491820ABBEFEE708 :100200002600020070470000014802490160704763 :100210000000002000127A000C48012101600C4A05 :10022000146840231C4314600C03956825439560B3 :1002300015691D431561016015681D4315609568BA :100240002543956015691D431561F4E704240040BA :10025000840D00407802000000000020080000002B :10026000040100008002000008000020601000006F :10027000200100000000000000127A0000000000D1 :04000005000000C136 :00000001FF Типу 5 соответствует предпоследняя строка :04000005000000C136 . Выходит что адрес 0x000000C1, исходя из примеров данного формата. Но в дизассемблере что-то я не наблюдаю такого адреса Добавлено after 4 minutes 28 seconds: Приведу еще системИнит и стартап коды Код: ;//-------- <<< Use Configuration Wizard in Context Menu >>> ---------- ;*/ ; <h> Stack Configuration ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Stack_Size EQU 0x00000800 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp ; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size EQU 0x00000800 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; External Interrupts DCD WWDT_IRQHandler ; 0: WWDT DCD SVD_IRQHandler ; 1: SVD DCD RTC_IRQHandler ; 2: RTC DCD FLASH_IRQHandler ; 3: FLASH DCD CMU_IRQHandler ; 4: CMU DCD ADC_IRQHandler ; 5: ADC DCD SPI0_IRQHandler ; 6: SPI0 DCD SPI1_IRQHandler ; 7: SPI1 DCD SPI2_IRQHandler ; 8: SPI2 DCD UART0_IRQHandler ; 9: UART0 DCD UART1_IRQHandler ; 10: UART1 DCD UART2_IRQHandler ; 11: UART2 DCD UART3_IRQHandler ; 12: UART3 DCD UART4_IRQHandler ; 13: UART4 DCD UART5_IRQHandler ; 14: UART5 DCD U7816_IRQHandler ; 15: U7816 DCD LPUART0_IRQHandler ; 16: LPUART0 DCD I2Cx_IRQHandler ; 17: I2Cx DCD 0 ; 18: RSV DCD CRYPTO_IRQHandler ; 19: CRYPTO DCD LPTIM_IRQHandler ; 20: LPTIM DCD DMA_IRQHandler ; 21: DMA DCD WKUPx_IRQHandler ; 22: WKUPx DCD COMP_IRQHandler ; 23: COMP DCD BTx_IRQHandler ; 24: BTx DCD QSPI_IRQHandler ; 25: QSPI DCD ETx_IRQHandler ; 26: ETx DCD BSTIM_IRQHandler ; 27: BSTIM DCD SPI3_IRQHandler ; 28: SPI3 DCD SPI4_IRQHandler ; 29: SPI4 DCD GPIO_IRQHandler ; 30: GPIO DCD LPUART1_IRQHandler ; 31: LPUART0 __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY ; Reset Handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP ; Dummy Exception Handlers (infinite loops which can be modified) NMI_Handler PROC EXPORT NMI_Handler [WEAK] B . ENDP HardFault_Handler\ PROC EXPORT HardFault_Handler [WEAK] B . ENDP SVC_Handler PROC EXPORT SVC_Handler [WEAK] B . ENDP PendSV_Handler PROC EXPORT PendSV_Handler [WEAK] B . ENDP SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B . ENDP Default_Handler PROC EXPORT LPUART1_IRQHandler [WEAK] EXPORT GPIO_IRQHandler [WEAK] EXPORT SPI4_IRQHandler [WEAK] EXPORT SPI3_IRQHandler [WEAK] EXPORT BSTIM_IRQHandler [WEAK] EXPORT ETx_IRQHandler [WEAK] EXPORT QSPI_IRQHandler [WEAK] EXPORT BTx_IRQHandler [WEAK] EXPORT COMP_IRQHandler [WEAK] EXPORT WKUPx_IRQHandler [WEAK] EXPORT DMA_IRQHandler [WEAK] EXPORT LPTIM_IRQHandler [WEAK] EXPORT CRYPTO_IRQHandler [WEAK] EXPORT I2Cx_IRQHandler [WEAK] EXPORT LPUART0_IRQHandler [WEAK] EXPORT U7816_IRQHandler [WEAK] EXPORT UART5_IRQHandler [WEAK] EXPORT UART4_IRQHandler [WEAK] EXPORT UART3_IRQHandler [WEAK] EXPORT UART2_IRQHandler [WEAK] EXPORT UART1_IRQHandler [WEAK] EXPORT UART0_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI0_IRQHandler [WEAK] EXPORT ADC_IRQHandler [WEAK] EXPORT CMU_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK] EXPORT SVD_IRQHandler [WEAK] EXPORT WWDT_IRQHandler [WEAK] LPUART1_IRQHandler GPIO_IRQHandler SPI4_IRQHandler SPI3_IRQHandler BSTIM_IRQHandler ETx_IRQHandler QSPI_IRQHandler BTx_IRQHandler COMP_IRQHandler WKUPx_IRQHandler DMA_IRQHandler LPTIM_IRQHandler CRYPTO_IRQHandler I2Cx_IRQHandler LPUART0_IRQHandler U7816_IRQHandler UART5_IRQHandler UART4_IRQHandler UART3_IRQHandler UART2_IRQHandler UART1_IRQHandler UART0_IRQHandler SPI2_IRQHandler SPI1_IRQHandler SPI0_IRQHandler ADC_IRQHandler CMU_IRQHandler FLASH_IRQHandler RTC_IRQHandler SVD_IRQHandler WWDT_IRQHandler B . ENDP ALIGN ; User Initial Stack & Heap IF :DEF:__MICROLIB EXPORT __initial_sp EXPORT __heap_base EXPORT __heap_limit ELSE IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap LDR R0, = Heap_Mem LDR R1, =(Stack_Mem + Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR ALIGN ENDIF END *****END OF FILE***** Код: /**************************************************************************//** * @file system_<Device>.c * @brief CMSIS Cortex-M# Device Peripheral Access Layer Source File for * Device <Device> * @version V3.10 * @date 23. November 2012 * * @note * ******************************************************************************/ /* Copyright (c) 2012 ARM LIMITED All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of ARM nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------*/ #include <stdint.h> #include "FM33A0XXEV.h" /*---------- DEFINES *----------*/ /*---------- Define clocks *----------*/ /* ToDo: add here your necessary defines for device initialization following is an example for different system frequencies */ #define __SYSTEM_CLOCK (8000000) /* Value of the INITIAL frequencies in Hz */ /*---------- Clock Variable definitions *----------*/ /* ToDo: initialize SystemCoreClock with the system core clock frequency value achieved after system intitialization. This means system core clock frequency after call to SystemInit() */ uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ /*---------- Clock functions *----------*/ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ { /* ToDo: add code to calculate the system frequency based upon the current register settings. This function can be used to retrieve the system core clock frequeny after user changed register sittings. */ SystemCoreClock = __SYSTEM_CLOCK; //return; } /** * Initialize the system * * @param none * @return none * * @brief Setup the microcontroller system. * Initialize the System. */ void SystemInit (void) { /* ToDo: add code to initialize the system do not use global variables because this function is called before reaching pre-main. RW section maybe overwritten afterwards. */ SystemCoreClock = __SYSTEM_CLOCK; //return; } Добавлено after 11 minutes 48 seconds: При попытке чтения JFlash почему то не показывает память. Хотя программа пишет что коннектится и очищает чип. Мануал https://vk.com/doc200790048_695339048?h ... sg_desktop Добавлено after 11 minutes 32 seconds: - WARNING: Flash bank 0 disabled, skipped. может в этом проблема? Добавлено after 25 minutes 26 seconds: Весь лог Jflash Код: Application log started - J-Flash V8.94 (J-Flash compiled Dec 10 2025 14:50:20) - JLinkARM.dll V8.94 (DLL compiled Dec 10 2025 14:49:54) Reading flash device list [C:\Program Files\SEGGER\JLink_V894\ETC/JFlash/Flash.csv] ... - List of flash devices read successfully (451 Devices) Reading MCU device list ... - List of MCU devices read successfully (13364 Devices) Creating new project ... - New project created successfully Reading target memory (0x00000000 - 0x00000200) ... - Connecting ... - Connected successfully - WARNING: Flash bank 0 disabled, skipped. - Target memory read successfully. (0 bytes, 0 ranges) - Completed after 0.155 sec Reading target memory (0x00000000 - 0x00040000) ... - WARNING: Flash bank 0 disabled, skipped. - Target memory read successfully. (0 bytes, 0 ranges) - Completed after 0.000 sec Disconnecting ... - Disconnected Connecting ... - Connecting via USB to probe/ programmer device 0 - Probe/ Programmer firmware: J-Link V11 compiled Apr 1 2025 10:02:30 - Probe/ Programmer S/N: 603000869 - Device "CORTEX-M0" selected. - Target interface speed: 9474 kHz (Fixed) - VTarget = 3.348V - Found SW-DP with ID 0x0BB11477 - DPIDR: 0x0BB11477 - CoreSight SoC-400 or earlier - Scanning AP map to find all available APs - AP[1]: Stopped AP scan as end of AP map has been reached - AP[0]: AHB-AP (IDR: 0x04770021, ADDR: 0x00000000) - Iterating through AP map to find AHB-AP to use - AP[0]: Core found - AP[0]: AHB-AP ROM base: 0xE00FF000 - CPUID register: 0x410CC300. Implementer code: 0x41 (ARM) - Unknown core, assuming Cortex-M0 - Found Cortex-M0 r0p0, Little endian. - FPUnit: 4 code (BP) slots and 0 literal slots - CoreSight components: - ROMTbl[0] @ E00FF000 - [0][0]: E000E000 CID B105E00D PID 000BB00D ??? - [0][1]: E0001000 CID B105E00D PID 000BB00A DWT - [0][2]: E0002000 CID B105E00D PID 000BB00B FPB - Executing init sequence ... - Initialized successfully - Target interface speed: 9474 kHz (Fixed) - Found 1 JTAG device. Core ID: 0x0BB11477 (None) - Connected successfully Reading entire flash chip ... - 1 sector, 1 range, 0x0 - 0x7FFFFFFF - WARNING: Flash bank 0 disabled, skipped. - Target memory read successfully. (0 bytes, 0 ranges) - Completed after 0.000 sec Добавлено after 42 minutes 49 seconds: код через jflash при этом вроде как заливается и верифицируется, но почему Код: Programming and verifying target (0 bytes, 0 ranges) ... 0 байтов?Код: Connecting ...
- Connecting via USB to probe/ programmer device 0 - Probe/ Programmer firmware: J-Link V11 compiled Apr 1 2025 10:02:30 - Probe/ Programmer S/N: 603000869 - Device "CORTEX-M0" selected. - Target interface speed: 4000 kHz (Fixed) - VTarget = 3.348V - Found SW-DP with ID 0x0BB11477 - DPIDR: 0x0BB11477 - CoreSight SoC-400 or earlier - Scanning AP map to find all available APs - AP[1]: Stopped AP scan as end of AP map has been reached - AP[0]: AHB-AP (IDR: 0x04770021, ADDR: 0x00000000) - Iterating through AP map to find AHB-AP to use - AP[0]: Core found - AP[0]: AHB-AP ROM base: 0xE00FF000 - CPUID register: 0x410CC300. Implementer code: 0x41 (ARM) - Unknown core, assuming Cortex-M0 - Found Cortex-M0 r0p0, Little endian. - FPUnit: 4 code (BP) slots and 0 literal slots - CoreSight components: - ROMTbl[0] @ E00FF000 - [0][0]: E000E000 CID B105E00D PID 000BB00D ??? - [0][1]: E0001000 CID B105E00D PID 000BB00A DWT - [0][2]: E0002000 CID B105E00D PID 000BB00B FPB - Executing init sequence ... - Initialized successfully - Target interface speed: 4000 kHz (Fixed) - Found 1 JTAG device. Core ID: 0x0BB11477 (None) - Connected successfully Programming and verifying target (0 bytes, 0 ranges) ... - Checking if selected data fits into selected flash sectors. - WARNING: Flash bank 0 disabled, skipped. - Target programmed and verified successfully (CRC = 0x00000000) - Completed after 0.003 sec |
|
| Автор: | Zikon [ Вс дек 21, 2025 16:20:37 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
адреса в Cortex-M выровнены по 2 байта, но младший бит используется для указания что это сокращённая система команд Thumb и должен быть равен 1 реальный адрес 0x000000C0 и по этому адресу находится процедура __main внутренняя обёртка для функции main() в которой делаются многие инициализации до запуска main() точно также адрес ResetHandler расположен по адресу 0x00000004 ![]() и равняется 0x00000165 -> 0x00000164 и если адрес старта записан в HEX (как тип 5) скорее всего надо после того как убрать галочку с "Run to main" заново собрать прроект (Build) и запустить отладку ? Может ещё надо описания чипа для JLink установить (JLinkDevices) какие-то дополнительные моменты есть у этих чипов ? Но не нашёл что-то для этих чипов такое. |
|
| Автор: | jcxz [ Вс дек 21, 2025 16:52:06 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
При попытке чтения JFlash почему то не показывает память. Хотя программа пишет что коннектится и очищает чип. Он у вас не читает флешь. В логе же пишет что "disabled".- WARNING: Flash bank 0 disabled, skipped. может в этом проблема? Скорее всего.Похоже у вас стоит защита на флешь. Сделайте полное стирание чипа "Erase chip". Потом - "Check blank". В JFlash. Полное стирание иногда позволяет снять защиту флешь. И не должно быть никаких ошибок или варнингов в логе. Если JFlash не работает с МК, то пытаться что-то делать отладчиком - бессмысленно. Отладчик просто врёт что загрузил прошивку. Добавлено after 2 minutes 9 seconds: Типу 5 соответствует предпоследняя строка :04000005000000C136 . Выходит что адрес 0x000000C1, исходя из примеров данного формата. Но в дизассемблере что-то я не наблюдаю такого адреса С .hex у вас всё нормально. Стартовые адреса правильные. Zikon уже правильно написал.PS: Я бы, в целях теста, скомпоновал программу в ОЗУ. И попробовал запустить оттуда. Тем более что её вроде "up to 80KB". Если флешь залочена, то возможно из ОЗУ запуск получится. Да и отлаживать программы в ОЗУ обычно удобнее. Если размер позволяет. PPS: Также ваш мануал содержит описание "LDT0 page" и "LDT1 page", в которых содержатся некие LOCK-слова и OPTBYTES. Почитайте про них подробнее - возможно с их помощью можно разлочить флешь. |
|
| Автор: | trek1203 [ Пн дек 22, 2025 18:39:51 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Для загрузки программы в RAM и запуска из нее мне надо самому написать scatter файл? Никаких адругих способов keil не предоставляет для этого? Никогда с этим не сталкивался просто) Добавлено after 1 minute 23 seconds: а earse chip я уже делал. Ничего не менялось. Возможно действительно стоят какие то локи, т.к. контроллер с уже работавшего устройства, на котором была прошивка. |
|
| Автор: | VladislavS [ Вт дек 23, 2025 09:25:02 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Для загрузки программы в RAM и запуска из нее мне надо самому написать scatter файл? Ну да. С этого, собственно, начинается создание любого проекта.Пример для Cortex-M0+ СпойлерИз flashКод: #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0+ -xc #define __ROM_BASE 0x08000000 #define __ROM_SIZE (1024*128) #define __RAM_BASE 0x20000000 #define __RAM_SIZE (1024*36) #define __STACK_SIZE 1024 #define __HEAP_SIZE 0 #define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* Stack starts at end of RAM */ #define __HEAP_BASE (AlignExpr(+0, 8)) /* Heap starts after RW_RAM section, 8 byte aligned */ #define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) LR_FLASH __ROM_BASE __ROM_SIZE ; load region size_region { ER_IROM1 __ROM_BASE __ROM_SIZE ; load address = execution address { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 __RAM_BASE __RW_SIZE ; RW data { .ANY (+RW +ZI) } #if __HEAP_SIZE > 0 ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap } #endif ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE {} ; Reserve empty region for stack } Из SRAM Код: #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0+ -xc #define __ROM_BASE 0x08000000 #define __ROM_SIZE (1024*128) #define __RAM_BASE 0x20000000 #define __RAM_SIZE (1024*36) #define __STACK_SIZE 1024 #define __HEAP_SIZE 0 #define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* Stack starts at end of RAM */ #define __HEAP_BASE (AlignExpr(+0, 8)) /* Heap starts after RW_RAM section, 8 byte aligned */ #define __RWX_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) LR_SRAM __RAM_BASE __RAM_SIZE ; load region size_region { ER_IRAM1 __RAM_BASE __RWX_SIZE ; load address = execution address { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) .ANY (+RW +ZI) } #if __HEAP_SIZE > 0 ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap } #endif ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE {} ; Reserve empty region for stack } |
|
| Автор: | trek1203 [ Вт дек 23, 2025 17:41:11 ] |
| Заголовок сообщения: | Re: Программирование микроконтроллеров компании Fudan в Keil |
Я понял. Спасибо всем большое за ответы! |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|




