zheka 1 21 февраля, 2020 Опубликовано 21 февраля, 2020 (изменено) · Жалоба Среда - Keil 5. Жылезка - STM32F746G-DISCOVERY Отладчик - китайская свистулька ST-LINK (никогда не подводил!) 3 часа отлаживал, не мог понять, почему QSPI_WriteEnable возвращает ошибку. Решил поставить вопрос ребром (F=0); И тихо офигел.... Это как такое может быть? Почему срабатывает условие ? P.S. return не происходит. Нижележащий код исполняется. Изменено 21 февраля, 2020 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 21 февраля, 2020 Опубликовано 21 февраля, 2020 · Жалоба А что не так-то? F равно нулю, условие не выполняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 21 февраля, 2020 Опубликовано 21 февраля, 2020 · Жалоба 1 minute ago, AHTOXA said: А что не так-то? F равно нулю, условие не выполняется. Так... или я отупел за эти 3 часа.... F=0; Строку внутри условия F !=0 видите? Брейкпоинт видите? Желтый треугольник на нем видите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 21 февраля, 2020 Опубликовано 21 февраля, 2020 · Жалоба А, надо было на треугольничек смотреть, как же я не догадался :-) Видимо, отладчик ошибается с отображением строки. Не смог правильно сопоставить ассемблерные инструкции и строки исходного кода. Попробуйте уменьшить уровень оптимизации. Или для пробы совсем отключите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 21 февраля, 2020 Опубликовано 21 февраля, 2020 · Жалоба Тогда, наверное, лучше в окне дизассемблера отлаживаться в таких спорных случаях. Ну и листинг поглядеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 21 февраля, 2020 Опубликовано 21 февраля, 2020 (изменено) · Жалоба По ходу тогда еще один вопрос задам. Что я делаю - пытаюсь пересесть с n25q128 на w25q128. Замучившись с глюками отладки, я решил пойти по более простому пути - переучить контроллер с одной флешки на другую с использованием простого, не HALовского кода. Такой код есть в моем рукописном алгоритме для прошивки флешки. Я отпаял с дискавери флешку n25q128 и припаял w25q128. Регистры у них по даташиту немного отличаются, но минимально необходимый набор одинаков #define QSPI_PAGESIZE 256 #define IO_READ_DDR_QUAD_CMD 0xED #define IO_READ_QUAD_CMD 0xEB #define WRITE_ENABLE_CMD 0x06 #define READ_STATUS_REGISTER_CMD 0x05 #define FAST_PROGRAM_CMD 0x32 #define SECTOR_ERASE_CMD 0xD8 #define SUBSECTOR_ERASE_CMD 0x20 Процесс стирания и программирования идет, но при верификации ошибки. Я обратил внимание, что код то правильный, но смещенный. При этом HALовский код в обычном режиме читает те же значения, что и IDE в режиме memoryMapped при проверке (на приведенном выше скрине). Совпадение результатов чтения разными кодами, в разных режимах говорит о том, что чтение правильное. Проблема с записью. Где может быть затык? Микросхемы то практически одинаковые w25q128jv.pdf n25q128a.pdf Изменено 21 февраля, 2020 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 21 февраля, 2020 Опубликовано 21 февраля, 2020 · Жалоба Хм.... выставил Dummy cycles=6 вместо 10 получил следующее - алгоритм пишет правильно (я заглядывал в map файл и в файлы с данными), алгоритм читает правильно, основной HAL код читает правильно, не пишет вообще... А вот отключение оптимизации помогло - брейкпоинты где не надо не срабатывают. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться