Метценгерштейн 0 29 мая Опубликовано 29 мая · Жалоба Линукс - это здорово, но я пишу нативно и с WDT так и не решил вопрос- сброса нет. Меня и устроит некая ф-я, которая дает команду на перезагрузку МК. Так ее тоже не найти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 29 мая Опубликовано 29 мая · Жалоба 27 минут назад, Метценгерштейн сказал: Линукс - это здорово На таких процах поверьте, что нет))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 29 мая Опубликовано 29 мая (изменено) · Жалоба On 5/29/2024 at 4:25 PM, Метценгерштейн said: Линукс - это здорово, но я пишу нативно и с WDT так и не решил вопрос- сброса нет. закоментировал сброс таймера void WDT_IRQHandler(void) { // Reload WWDT counter and clear WWDT interrupt flag // sysClearWatchDogTimerCount(); sysClearWatchDogTimerInterruptStatus(); sysprintf("Reset WDT counter\n"); } сброс процессора есть U-Boot> usb start (Re)start USB... USB0: USB EHCI 0.95 scanning bus 0 for devices... 2 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found U-Boot> fatload usb 0 0 wdt.bin reading wdt.bin 7468 bytes read in 25 ms (291 KiB/s) U-Boot> go 0 ## Starting application at 0x00000000 ... SF: Detected MX25L6405D with page size 64 KiB, total 8 MiB This sample code demonstrate reset WDT function Reset WDT counter U-Boot 2013.04-rc2 (May 29 2024 - 22:20:57) CPU: NUC976 DRAM: 64 MiB MMC: mmc: 0 если собрать пример как есть - не сбрасывается U-Boot> tftp 0 WDT.bin Using emac device TFTP from server 192.168.0.2; our IP address is 192.168.0.136 Filename 'WDT.bin'. Load address: 0x0 Loading: # 1.2 MiB/s done Bytes transferred = 7540 (1d74 hex) U-Boot> go 0 ## Starting application at 0x00000000 ... SF: Detected MX25L6405D with page size 64 KiB, total 8 MiB This sample code demonstrate reset WDT function Reset WDT counter Reset WDT counter Reset WDT counter Reset WDT counter Reset WDT counter Reset WDT counter Reset WDT counter Собирал эклипсом под Linux - скачал "Eclipse IDE for Embedded C/C++ Developers" распаковал и запустил https://www.eclipse.org/downloads/packages/ компилятор был установлен, помоему это штатный убунтовский $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS" arm-none-eabi-gcc, gcc version 10.3.1 20210621 (release) (15:10.3-2021.07-4) Если не установлен, установить $ sudo apt update $ sudo apt install gcc-arm-none-eabi импортировал проект File -> Open Projects from File System -> Import source: путь к директории с примером нажал build, эклипс сам нашел компилятор и все собрал Изменено 29 мая пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 30 мая Опубликовано 30 мая · Жалоба 10 часов назад, sasamy сказал: если собрать пример как есть - не сбрасывается И в чем проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 30 мая Опубликовано 30 мая (изменено) · Жалоба On 5/30/2024 at 9:56 AM, mantech said: И в чем проблема? У вас видимо с чтением написанного 🙂 и пониманием как работает wdt, в примере очевидно нет никаких проблем - сторожевой таймер работает, если не сбросить счётчик wdt имитируя "зависание" процессор перезагружается аппаратно. Без прерываний пример тоже работает - достаточно запустить wdt и не сбрасывать его счётчик процессор сбрасывается аппаратно. Чем я собирал написано выше, схема платы на которой запускал http://starterkit.ru/html/doc/SK-NUC976.pdf , бинарник в аттаче #include "nuc970.h" #include "sys.h" int main(void) { sysDisableCache(); sysFlushCache(I_D_CACHE); sysEnableCache(CACHE_WRITE_BACK); sysInitializeUART(); sysprintf("\nThis sample code demonstrate reset WDT function\n"); // Disable write protect mode to control WDT register outpw(REG_SYS_REGWPCTL,0x59); outpw(REG_SYS_REGWPCTL,0x16); outpw(REG_SYS_REGWPCTL,0x88); while(!(inpw(REG_SYS_REGWPCTL)&(1<<0))); outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | 1); // Enable WDT engine clock sysSetWatchDogTimerInterval(6); // Set WDT time out interval to 2^16 Twdt = 0.7 sec. Where Twdt = 12MHZ / 128 // sysInstallWatchDogTimerISR(HIGH_LEVEL_SENSITIVE | IRQ_LEVEL_1, WDT_IRQHandler); sysEnableWatchDogTimerReset(); sysEnableWatchDogTimer(); while(1); } U-Boot> tftp 0 WDT.bin Using emac device TFTP from server 192.168.0.2; our IP address is 192.168.0.136 Filename 'WDT.bin'. Load address: 0x0 Loading: # 243.2 KiB/s done Bytes transferred = 5732 (1664 hex) U-Boot> go 0 ## Starting application at 0x00000000 ... SF: Detected MX25L6405D with page size 64 KiB, total 8 MiB This sample code demonstrate reset WDT function U-Boot 2013.04-rc2 (May 29 2024 - 22:20:57) CPU: NUC976 DRAM: 64 MiB WDT.bin Изменено 30 мая пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 30 мая Опубликовано 30 мая · Жалоба 1 hour ago, sasamy said: Без прерываний пример тоже работает - достаточно запустить wdt и не сбрасывать его счётчик процессор сбрасывается аппаратно. Не подтверждаю на своей плате. Есть отладка фирменная. Можете еще раз написать полный код, чтобы я скопировал к себе и попробовал. Я должен видеть в UART что постоянно получаю срос процессора и запуск с начала. Сообщение должно повторяться "This sample code demonstrate reset WDT function" не заметил бинарник. Сейчас загружу его к себе. Проц тоже 976. Ваш бинарь ведет себя так же. Вижу только один вход в main. Перезагурзки нет На фирменной плате ваш бинарь имеет аналогичное поведение- один вход в main() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 30 мая Опубликовано 30 мая · Жалоба В 23.05.2024 в 11:35, Метценгерштейн сказал: Прерывание получаю по WDT, но физического ресета не происходит. #include "nuc970.h" #include "sys.h" void WDT_IRQHandler(void) { // Reload WWDT counter and clear WWDT interrupt flag sysClearWatchDogTimerCount(); sysClearWatchDogTimerInterruptStatus(); sysprintf("Reset WDT counter2\n"); } Это почти пример из BSP. Я уже и SYS_MISCFCR активировал, нет реакции. И статусы регистров проверял. В общем, прерывание есть, а сброса проца нету. Вызываете sysprintf() из ISR? А что внутри неё - смотрели? Рассчитана ли она на такой вызов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 30 мая Опубликовано 30 мая · Жалоба On 5/30/2024 at 11:39 AM, Метценгерштейн said: На фирменной плате ваш бинарь имеет аналогичное поведение- один вход в main() врядли дело в схеме - скорей всего без убута не работает, попробуйте загрузить убут и из него запустить - у меня два примера выше в логах как запустить из убута, один с usb флешки с fat, другой с tftp, бинарник убута в аттаче, запускал я его с хост системы на линуксе так Quote sudo ./nuwriter -m sdram -d NUC976DK62Y.ini -a 0xE00000 -w u-boot.bin -n на вин аналогично можно запустить u-boot.bin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 30 мая Опубликовано 30 мая · Жалоба 22 часа назад, Samum421 сказал: Нувотон имеет слабый Линукс слабый линух + слабый прогер = гремучая смесь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 30 мая Опубликовано 30 мая · Жалоба 2 minutes ago, sasamy said: врядли дело в схеме - скорей всего без убута не работает, попробуйте загрузить убут и из него запустить - у меня два примера выше в логах как запустить из убута, один с usb флешки с fat, другой с tftp, бинарник убута в аттаче, запускал я его с хост системы на линуксе так Можно рассказать, u-boot- это что и для чего? Я же просто программы запускаю с прошивки. Они стартурют с 0-го адреса, сразу с main. u-boot этот зачем? Мы NuWritter используем для загрузки. Если я u-boot загружу, то потом чтобы прошивку загрузить, он же перезатрет этот u-boot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 30 мая Опубликовано 30 мая · Жалоба On 5/30/2024 at 12:08 PM, Метценгерштейн said: u-boot этот зачем? чтобы вам понять где у вас проблема - в схеме или в ините примера, у меня всё работает, если вам не надо можно не напрягаться 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 30 мая Опубликовано 30 мая · Жалоба Я не так выразился. Я пытался понять, что такое u-boot и как его записать, потом сверху прошивку, не затерев его. Подскажите как сделать- все проверим) Тут еще момент с u-boot, я что-то упустил с этитм процом, что убут нужен? Недопонял этот момент 22 minutes ago, jcxz said: Вызываете sysprintf() из ISR? А что внутри неё - смотрели? Рассчитана ли она на такой вызов? Смысл в том, что могу из прерывания ее закомментить. Ресета не будет. Могу прерывание вообще не делать- ресета все равно нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 30 мая Опубликовано 30 мая (изменено) · Жалоба On 5/30/2024 at 12:13 PM, Метценгерштейн said: Я не так выразился. Я пытался понять, что такое u-boot и как его записать, потом сверху прошивку, не затерев его. u-boot это загрузчик, он работает в sdram, примеры в sram так что они не пересекаются. Я загружал примеры из u-boot который стартует из spi nor, но его можно стартануть и через nuwriter чтобы не писать ничего на носитель и уже из убута загрузить пример с usb флешки например. Я проверял у себя - убут стартует такой командой из sdram Quote sudo ./nuwriter -m sdram -d NUC976DK62Y.ini -a 0xE00000 -w u-boot.bin -n -a 0xE00000 - это адрес в sdram по которому его нужно записать после инита sdram и передать туда управление, у меня нет винды чтобы проверять как это на винде с графическим интерфейсом сделать Изменено 30 мая пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 30 мая Опубликовано 30 мая · Жалоба 1000 извинений. У нас Nuwriter. Чтобы загрузить U-boot, мы здесь его в SPI флеш грузим? Потом уже , запустив проект, на флешке должны подгрузить наш wdt файл? Пока каша у меня) Сразу вопрос- загрузка с SPI флеш- это щелкнуть два джампера на плате. Пойдет после ресета загрузка уже с SPI флеш, получается, загрузится u-boot наш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 30 мая Опубликовано 30 мая · Жалоба On 5/30/2024 at 12:36 PM, Метценгерштейн said: Чтобы загрузить U-boot, мы здесь его в SPI флеш грузим? проверил у себя - загрузил напрямую WDT.bin через nuwriter и сброс не срабатывает как и у вас ======================================= Run firmware code CPU: 300MHz, DDR: 150MHz, SYS: 300MHz, PCLK: 75MHz Parse NuWriter command line ======================================= ID=0x0000C216 _spi_type =0 SM ID [0][0][0][0] SM ID not support!! [0][0][0][0] This sample code demonstrate reset WDT function так что дело всё же в ините примера - после загрузки через u-boot он начинает работать. Как записать убут должно быть написано в мануале nuwriter, куда вам записывать я не могу сказать - я даже не знаю с какого носителя вы загружаете вашу плату. Чтобы загрузить напрямую в sdram 1) type: DDR/SRAM 2) DDR init: NUC976DK62Y.ini 3) Image execute address: 0xE00000 вроде так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться