МК: Миландр 1986ВЕ91Т (Cortex-M3), 80 МГц
NAND: Winbond W29N08GV, 8-bit, 3.3 В
Отладка: Keil + ULINK2 (JTAG)
Проблема: пытаюсь отправить команду Reset в NAND через EBC. Ядро зависает на инструкции STRB, ULINK2 отваливается мгновенно.
До зависания:
Что странного:
После STRB на осциллографе CLE и WE циклятся без остановки. CE при этом держится внизу. Данные на шине 0xFF. Для команды Reset адресных циклов нет. BUSY при ручной проверке работает. Пробовались и «нормальные» тайминги в NAND_CYCLES - результат тот же.
Вопросы:
1. Аппаратный баг EBC или ошибки в настройках?
2. Если не баг, то чего не хватает в настройке EBC? Нужно ли что-то ещё кроме включения тактирования и битов NAND+BUSY в CONTROL?
3. Правильный ли адрес для командного регистра NAND - 0x700007F8? В некоторых документах видел 0x770007F8, но оба ведут себя одинаково.
4. Может ли ядро уходить в lockup/deadlock, если EBC ждёт READY от NAND, и поэтому ULINK2 отваливается? Как это обойти?
5. Циклическое повторение CLE/WE без пауз - это нормальное поведение EBC при ожидании, или признак ошибки конфигурации?
Скриншоты регистров EBC, RST_CLK и ядра прилагаю.
NAND: Winbond W29N08GV, 8-bit, 3.3 В
Отладка: Keil + ULINK2 (JTAG)
Проблема: пытаюсь отправить команду Reset в NAND через EBC. Ядро зависает на инструкции STRB, ULINK2 отваливается мгновенно.
Код::
[I]((volatile uint8_t[/I])0x700007F8) = 0x00; // пробовал и 0x770007F8
- R1 = 0x700007F8
- PC = 0x08004566
- xPSR = 0x61000000
- EBC_CONTROL = 0x84 (NAND=1, BUSY=1)
- EBC_NAND_CYCLES = 0xFFFFFFFF
Тактирование::
MDR_RST_CLK->PER_CLOCK |= (
RST_CLK_PER_CLOCK_PCLK_EN_PORTA |
RST_CLK_PER_CLOCK_PCLK_EN_PORTC |
RST_CLK_PER_CLOCK_PCLK_EN_PORTD |
RST_CLK_PER_CLOCK_PCLK_EN_EXT_BUS_CNTRL // EBC
);
Что странного:
После STRB на осциллографе CLE и WE циклятся без остановки. CE при этом держится внизу. Данные на шине 0xFF. Для команды Reset адресных циклов нет. BUSY при ручной проверке работает. Пробовались и «нормальные» тайминги в NAND_CYCLES - результат тот же.
Вопросы:
1. Аппаратный баг EBC или ошибки в настройках?
2. Если не баг, то чего не хватает в настройке EBC? Нужно ли что-то ещё кроме включения тактирования и битов NAND+BUSY в CONTROL?
3. Правильный ли адрес для командного регистра NAND - 0x700007F8? В некоторых документах видел 0x770007F8, но оба ведут себя одинаково.
4. Может ли ядро уходить в lockup/deadlock, если EBC ждёт READY от NAND, и поэтому ULINK2 отваливается? Как это обойти?
5. Циклическое повторение CLE/WE без пауз - это нормальное поведение EBC при ожидании, или признак ошибки конфигурации?
Скриншоты регистров EBC, RST_CLK и ядра прилагаю.
Вложения
-
11 KB Просмотры: 0
-
17.3 KB Просмотры: 0
-
29.1 KB Просмотры: 0