Metallist64 0 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба Всем доброго времени суток! Раньше использовал LPC1778 + AT45DB161D. В Keil 4.5xx была библиотека FS_CM3.lib. С помощью нее можно было на флешке создавать файлы и работать с ними, как на жестком диске. Было очень удобно. Волею судеб перешел на STM32. В частности, использую проц.STM32H743ZI. Познакомился к HAL )). К процу опять подключил внешнюю flash память - AT45DB161D. Поставил IDE - Keil 5.24. Изучил примеры, которые можно подкачать прямо из IDE. Во всех примерах используется внешняя карта памяти. А при попытке использовать SPI память получаю следующую ошибку от компилятора: "Initial Current ::File System:Drive is not enabled in FS_Config.c" На сайте кейла есть мануал: https://www.keil.com/pack/doc/mw/FileSystem/html/fs_create_app.html Если делать по нему, то по какой-то печали у меня не создается файл "RTE_Device.h". А при компиляции возникает та же ошибка. Пробовал подобную манипуляцию с процом серии STM32F. В этом случае файл "RTE_Device.h" создается, но компиляция опять дает ошибку "Initial Current ::File System:Drive is not enabled in FS_Config.c" Странно, в мануале есть явный намек на использование SPI флэши "AT45DB642D". Если кто сталкивался, подскажите пожалуйста где собака зарыта! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 11 апреля, 2019 Опубликовано 11 апреля, 2019 · Жалоба 1 час назад, Metallist64 сказал: "Initial Current ::File System:Drive is not enabled in FS_Config.c" На сайте кейла есть мануал: https://www.keil.com/pack/doc/mw/FileSystem/html/fs_create_app.html Так там же явно написано Цитата If the Initial Current Drive is not configured correctly, the project will not build. The File System Component will flag this with an error message: C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.0.0\FileSystem\Include\fs_config.h(178): error: #35: #error directive: "Initial Current ::File System:Drive is not enabled" #error "Initial Current ::File System:Drive is not enabled" В это время, глядя на fs_config.h, видим /* Check if initial drive is enabled */ #if ((FS_INITIAL_CDRIVE == 0) && (NOR0_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 1) && (NOR1_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 2) && (MC0_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 3) && (MC1_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 4) && (NAND0_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 5) && (NAND1_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 6) && (RAM0_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 7) && (USB0_ENABLE == 0)) || \ ((FS_INITIAL_CDRIVE == 8) && (USB1_ENABLE == 0)) #error "Initial Current ::File System:Drive is not enabled in FS_Config.c" #endif что говорит о том, что эти самые настройки каким-то образом не экспортировались при создании проекта. Вам двигаться в этом направлении - разбираться, почему так: собрать же проект с нуля без всяких кодогенераторов/калокубов предлагать, видимо, не стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Спасибо за подсказку. Собрал проект с нуля. Действительно, кое-что изменилось. При компиляции теперь появляется ошибка: .\Objects\1.axf: Error: L6218E: Undefined symbol Driver_SPI0 (referred from at45db641e.o). Перерыл весь проект, в RTE вроде все драйвера подключены. Проект выложить не могу. Он весит почти 100 Мб. Не совсем понятное, что такое Driver_SPI0, в файлах эта сущность вроде есть, а факту нет )). Проясните пожалуйста ситуацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 40 12 апреля, 2019 Опубликовано 12 апреля, 2019 · Жалоба Загрузите на bitbucket/github и опубликуйте ссылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 13 апреля, 2019 Опубликовано 13 апреля, 2019 · Жалоба 21 hours ago, x893 said: Загрузите на bitbucket/github и опубликуйте ссылку. Здравствуйте, загрузил проект. git clone https://[email protected]/Metallist_64/flash.git Среда Keil5.24. Возможно придется подгрузить паки. Но, скорее всего, среда сама знает, что нужно. Если что-то не срастется, могу сказать какие паки устанавливал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 40 13 апреля, 2019 Опубликовано 13 апреля, 2019 · Жалоба Написано же зеленым по белому #define DRIVER_SPI_NUM # Replace symbol # with any integer to customize the number of SPI driver (i.e. Driver_SPI#) used to communicate with Flash device. Default setting is 0. Добавте в Option for Target -> C/C++ Define: DRIVER_SPI_NUM=1 и будет счастье (особенно при наличии исходников). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 17 hours ago, x893 said: и будет счастье (особенно при наличии исходников). Большое спасибо за помощь! Насколько я понял, DRIVER_SPI_NUM=1 указывает номер SPI интерфейса. Т.е. для SPI интерфейса №4 надо указать DRIVER_SPI_NUM=4. Компиляция проходит успешно. Но дальше опять ступор. if (finit ("F0:") == fsOK) Здесь все хорошо, драйвер инициализируется. if (fcheck ("F0:") == fsAccessDenied ) { while(0); } А далее fcheck("F0:") возвращает ошибку fsAccessDenied. Что означает "Resource access denied". В документе, такого состояния не должно возвращаться. http://www.keil.com/pack/doc/MW/FileSystem/html/group__utility__routines.html Немного копнув нашел драйвере AT45DB641E.c Есть следующие функции: static int32_t Initialize (ARM_Flash_SignalEvent_t cb_event) static bool SendCommand (uint8_t cmd, uint32_t addr, const uint8_t *data, uint32_t size) static int32_t ReadData (uint32_t addr, void *data, uint32_t cnt) ... При отладке успешно вызывается функция Initialize(). Но остальные функции не вызываются. Подскажите пожалуйста, куда можно копнуть? P.S. Подключил библиотеку для отладки FS_Dbg_lfn_cm3.lib. В файле FS_Debug.c отметил все пункты Errors+API. Но ничего не происходит. В функции fcheck() и finit() зайти не получается , они просто выполняются и происходит переход к следующей строке. Кто знаком с подобной ситуацией, подскажите пожалуйста как это должно работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 40 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Отладчик в руки и копать. Ещё есть метод пристального вглядывания, но он медленнее. Я вообще всё это увидел после git clone с bitbucket. 15 минут заняло Driver_SPI0. Остальное ну ещё часа два максимум. Там же ничего (НИЧЕГО Карл) секретного нет. Все буквы в наличии. Хотя даже если бы и lib были - тоже ничего страшного. IDA есть, OZONE и т.п. Был бы H7 и AT45 можно было бы за Вас кнопки подавить, но не судьба. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 hour ago, x893 said: Отладчик в руки и копать. Там же ничего (НИЧЕГО Карл) секретного нет. Стараюсь, копаю... Как бы мне в этот fcheck () зайти и посмотреть что внутри происходит. Понять, откуда так сказать, ноги растут. А ту сразу бац и fsAccessDenied. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 15 апреля, 2019 Опубликовано 15 апреля, 2019 · Жалоба Уважаемые знатоки, может у кого есть проект для Keil 5 с поддержкой SPI - флэшек ? Никак не могу заставить обращаться драйвер к AT45DB641E. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 40 15 апреля, 2019 Опубликовано 15 апреля, 2019 · Жалоба 10 hours ago, Metallist64 said: Стараюсь, копаю... Как бы мне в этот fcheck () зайти и посмотреть что внутри происходит. Понять, откуда так сказать, ноги растут. А ту сразу бац и fsAccessDenied. Нажать правую кнопку и выбрать Go To Definitions. Или в отладчике F11 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 15 апреля, 2019 Опубликовано 15 апреля, 2019 · Жалоба Так и делаю. После нажатия F11 переходит к следующей строке, в функцию не заходит. Это видимо библиотечная функция, внутренности закрыты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 21 апреля, 2019 Опубликовано 21 апреля, 2019 (изменено) · Жалоба Всем привет! Потихоньку продвигаюсь в решении вопроса. Для нормальной работы необходимо выполнить запуск следующих функций. stat = finit ("F0:"); stat = fmount ("F0:"); stat = fcheck("F0:"); Но теперь возникла загвоздка с форматированием. stat = fformat("F0:",""); Форматирование завершается через 3 сек. С ошибкой fsMediaError (0x09). Нормальное время ChipErease для AT45DB161D ~ 30 sec. Фокус заключается в том, что команда на форматирование отправляется. И начинаются попытки чтения статусного регистра. Но затем попытки чтения статуса прекращаются. И выдается ошибка fsMediaError. Может таймер какой-то срабатывает? P.S. При снижении частоты SPI (~ 100кГц). функция fcheck() возвращает ошибку: 0x08 (fsDriverError) Буду признателен за любую информацию по данным вопросам. Изменено 21 апреля, 2019 пользователем Metallist64 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 21 апреля, 2019 Опубликовано 21 апреля, 2019 · Жалоба Всем привет! Достиг определенного успеха в работе с EFS. Оказалось, для AT45DB161D лучше использовать шаблон от AT45DB642D.с А так пришлось поправить функцию ReadData (); Нужно было посылать 4 пустых байта, а не два. В даташите есть такой момент: To perform a continuous read from the standard DataFlash page size (528 bytes), an opcode of E8H must be clocked into the device followed by three address bytes (which comprise the 24-bit page and byte address sequence) and 4 don’t care bytes. В шаблоне AT45DB642D.с этот нюанс учтен. А format("F0:","") нормально пока не заработал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться