Перейти к содержанию
    

Nuvoton NUC970 не могу заставить WDT срабатывать на сброс.

Линукс - это здорово, но я пишу нативно и с WDT так и не решил вопрос- сброса нет.

Меня и устроит некая ф-я, которая дает команду на перезагрузку МК. Так ее тоже не найти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 минут назад, Метценгерштейн сказал:

Линукс - это здорово

На таких процах поверьте, что нет)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, эклипс сам нашел компилятор и все собрал

 

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, sasamy сказал:

если собрать пример как есть -  не сбрасывается

И в чем проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, sasamy said:

Без прерываний пример тоже работает - достаточно запустить wdt и не сбрасывать его счётчик процессор сбрасывается аппаратно.

Не подтверждаю на своей плате. Есть отладка фирменная.

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

Я должен видеть в UART что постоянно получаю срос процессора и запуск с начала. 
Сообщение должно повторяться
"This sample code demonstrate reset WDT function"

не заметил бинарник. Сейчас загружу его к себе. Проц тоже 976.

Ваш бинарь ведет себя так же. Вижу только один вход в main. Перезагурзки нет
image.png.d6ae6191bf29cf55b1f1862f3dff3999.png

 

На фирменной плате ваш бинарь имеет аналогичное поведение- один вход в main()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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? А что внутри неё - смотрели? Рассчитана ли она на такой вызов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 часа назад, Samum421 сказал:

Нувотон имеет слабый Линукс

слабый линух + слабый прогер = гремучая смесь  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, sasamy said:

врядли дело в схеме - скорей всего без убута не работает, попробуйте загрузить убут и из него запустить - у меня два примера выше в логах как запустить из убута, один с usb флешки с fat, другой с tftp, бинарник убута в аттаче, запускал я его с хост системы на линуксе так

Можно рассказать, u-boot- это что и для чего? Я же просто программы запускаю с прошивки. Они стартурют с 0-го адреса, сразу с main.

u-boot этот зачем?

Мы NuWritter используем для загрузки. Если я u-boot загружу, то потом чтобы прошивку загрузить, он же перезатрет этот u-boot

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/30/2024 at 12:08 PM, Метценгерштейн said:

u-boot этот зачем?

чтобы вам понять где у вас проблема - в схеме или в ините примера, у меня всё работает, если вам не надо можно не напрягаться 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не так выразился. Я пытался понять, что такое u-boot и как его записать, потом сверху прошивку, не затерев его.

Подскажите как сделать- все проверим)

Тут еще момент с u-boot, я что-то упустил с этитм процом, что убут нужен? Недопонял этот момент

22 minutes ago, jcxz said:

Вызываете sysprintf() из ISR? А что внутри неё - смотрели? Рассчитана ли она на такой вызов?

Смысл в том, что могу из прерывания ее закомментить. Ресета не будет. Могу прерывание вообще не делать- ресета все равно нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и передать туда управление, у меня нет винды чтобы проверять как это на винде с графическим интерфейсом сделать

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1000 извинений. У нас Nuwriter. Чтобы загрузить U-boot, мы здесь его в SPI флеш грузим?
image.thumb.png.28eec9984ec7ff8ee9c5c8057d64c653.png

Потом уже , запустив проект, на флешке должны подгрузить наш wdt файл?

Пока каша у меня)

Сразу вопрос- загрузка с SPI флеш- это щелкнуть два джампера на плате. Пойдет после ресета загрузка уже с SPI флеш, получается, загрузится u-boot наш.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

вроде так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

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

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...