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

То ли лыжи не едут.....

Среда - Keil 5.

Жылезка - STM32F746G-DISCOVERY

Отладчик - китайская свистулька ST-LINK (никогда не подводил!)

3 часа отлаживал, не мог понять, почему QSPI_WriteEnable возвращает ошибку.

Решил поставить вопрос ребром (F=0);

И тихо офигел....

h7jSarOT.png?download=1

 

S3yveMyf.png?download=1

 

Это как такое может быть? Почему срабатывает условие ?

P.S. return не происходит. Нижележащий код исполняется.

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

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


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

1 minute ago, AHTOXA said:

А что не так-то? F равно нулю, условие не выполняется.

Так... или я отупел за эти 3 часа....

F=0;

Строку внутри условия F !=0 видите? Брейкпоинт видите? Желтый треугольник на нем видите?

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


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

А, надо было на треугольничек смотреть, как же я не догадался :-)

Видимо, отладчик ошибается с отображением строки. Не смог правильно сопоставить ассемблерные инструкции и строки исходного кода.

Попробуйте уменьшить уровень оптимизации. Или для пробы совсем отключите.

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


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

Тогда, наверное, лучше в окне дизассемблера отлаживаться в таких спорных случаях. Ну и листинг поглядеть.

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


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

По ходу тогда еще один вопрос задам. Что я делаю - пытаюсь пересесть с 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

Процесс стирания и программирования идет, но при верификации ошибки. Я обратил внимание, что код то правильный, но смещенный.

itdsTRya.png?download=1

При этом HALовский код в обычном режиме читает те же значения, что и IDE в режиме memoryMapped  при проверке (на приведенном выше скрине).

Совпадение результатов чтения разными кодами, в разных режимах говорит о том, что чтение правильное. Проблема с записью.

Где может быть затык? Микросхемы то практически одинаковые

 

w25q128jv.pdf

n25q128a.pdf

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

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


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

Хм.... выставил Dummy cycles=6 вместо 10 получил следующее - алгоритм пишет правильно (я заглядывал в map файл и в файлы с данными), алгоритм читает правильно, основной HAL код читает правильно, не пишет вообще...

А вот отключение оптимизации помогло - брейкпоинты где не надо не срабатывают. Спасибо!

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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