Easyelectronics.ru

Электроника для всех
Текущее время: 16 окт 2019, 07:33

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Keil 5 + AT45DB161D
СообщениеДобавлено: 15 апр 2019, 12:54 
Здравствуйте!

Зарегистрирован: 15 апр 2019, 12:39
Сообщения: 4
Здравствуйте, уважаемые форумчане!
Возникла проблема с использование EFS для SPI флэшек в Keil 5.

Раньше использовал LPC1778 + AT45DB161D. В Keil 4.5xx была библиотека FS_CM3.lib. С помощью нее можно было на флешке создавать файлы и работать с ними, как на жестком диске.
Было очень удобно.

Волею судеб перешел на STM32. В частности, использую проц.STM32H743ZI. Познакомился к HAL )).
К процу подключил внешнюю flash память - AT45DB161D.
Поставил IDE - Keil 5.24.
Изучил примеры, которые можно подкачать прямо из IDE.
На сайте кейла есть мануал: https://www.keil.com/pack/doc/mw/FileSy ... e_app.html
Сделал все по нему. В результате определенных манипуляций получилось скомпилировать и запустить проект.

Но при выполнении fcheck ("F0:") получаю результат fsAccessDenied.
В функции обмена по SPI обращений нет. Видимо до них дело не доходит.
В саму функцию fcheck () зайти не получается, она видимо библиотечная.

Сам SPI работает. Функция HAL_SPI_Transmit работает, проверено через осциллограф.

Прошу помощи, может кто делал подобный проект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 16 апр 2019, 15:34 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 171
Откуда: Украина
Попробовал у себя запустить диск на SPI флешке. Смущает меня отсутствие обмена по SPI при выполнении fmount ("F0:"), если далее выполнять например fformat, то обмен уже есть но завершается с ошибкой - "fsNoMedia".
...Разобрался с "fsNoMedia", система команд немного другая у подопытной W25q80, формат теперь проходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 16 апр 2019, 23:54 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 171
Откуда: Украина
Протестировал на stmf407 и W25Q80BV, рекомендую поганять вначале функции ProgramData, ReadData, чтобы убедится в правильности записи-чтения. Например так :
Код:
memset(buf, 0x37, 0x1000);       
ProgramData (0, buf, 0x1000);   
ReadData (0, buf, 0x1000);

Вложение:
Test_spi_flash.7z [150.98 Кб]
Скачиваний: 28


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 19 апр 2019, 11:15 
Здравствуйте!

Зарегистрирован: 15 апр 2019, 12:39
Сообщения: 4
AlexTA писал(а):
Протестировал на stmf407 и W25Q80BV, рекомендую поганять вначале функции ProgramData, ReadData, чтобы убедится в правильности записи-чтения. Например так :


Здравствуйте, AlexTA! Большое спасибо за помощь! Драйвер задышал. Пока разбираюсь с переносом на другую AT45.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 19 апр 2019, 11:52 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 171
Откуда: Украина
Если система команд у AT45DB161D совпадает например с AT45DB641E, то можно просто взять файлы у кеила (AT45DB641E.h, AT45DB641E.с) и подставить вместо моих.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 21 апр 2019, 18:51 
Здравствуйте!

Зарегистрирован: 15 апр 2019, 12:39
Сообщения: 4
AlexTA писал(а):
Если система команд у AT45DB161D совпадает например с AT45DB641E, то можно просто взять файлы у кеила (AT45DB641E.h, AT45DB641E.с) и подставить вместо моих.

AlexTA, Да система команд совпадает. Сделал коррекцию
в файлах AT45DB161D.h и AT45DB161D.с. Добавил их как Custom в CMSIS Driver.
При отладке этого фрагмента
Код:
stat = finit ("F0:");
stat = fmount ("F0:");
stat =  fcheck("F0:");
while(idx < 0x10)
{
  buf_my[idx] = idx;
  idx++;
}
state = ProgramData (0, buf_my, 0x10);   
state = ReadData (0, buf_my, 0x10);

получаю следующий результат:
stat - всегда fsOK
state - после вызова ReadData принимает значение - 0x10. Вроде как 16 байт прочитано.
Но при этом, в буфере buf_my кривые первые два байта.
Остальные правильные. Если изменить адрес:
Код:
state = ProgramData (60000, buf_my, 0x10);   
state = ReadData (60000, buf_my, 0x10);

То будут считаны 0x00. Т.е. около границы сектора чтение не работает. У меня сектор 66кб.

Второй вопрос по fformat.
Выполняю :
Код:
stat = fformat("F0:","");

Формат завершается чере 3 сек. С ошибкой fsMediaError (0x09).
Нормальное время ChipErease - 30 sec.
НО! Видно, что команда на форматирование отправляется.
И начинаются попытки чтения статусного регистра.
Но затем попытки чтения статуса прекращаются. И выдается ошибка fsMediaError.
Может где-то таймер есть на чтение статуса?

Буду признателен за любую информацию по данным вопросам.


Вложения:
AT45DB161D.h [3.94 Кб]
Скачиваний: 180
AT45DB161D.c [14.88 Кб]
Скачиваний: 169
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 21 апр 2019, 20:59 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 171
Откуда: Украина
Опыты ProgramData - ReadData проводите закомментировав все что касается файловой системы (init_filesystem ,cmd_format ) - ошибки в начале массива должны пропасть , добейтесь правильной записи чтения всего объема флеш, если это не помогает значит есть ошибка в драйвере (у меня например писало через сектор) , или проблема с подтяжкой(у меня подтянуто к + HOLD, DO), помехами. Возможно стоит попробовать другой шаблон (AT45DB642D.с), проблема скорее всего связана с обработкой статуса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 22 апр 2019, 01:43 
Здравствуйте!

Зарегистрирован: 15 апр 2019, 12:39
Сообщения: 4
AlexTA писал(а):
Опыты ProgramData - ReadData проводите закомментировав все что касается файловой системы (init_filesystem ,cmd_format ) - ошибки в начале массива должны пропасть , добейтесь правильной записи чтения всего объема флеш, если это не помогает значит есть ошибка в драйвере (у меня например писало через сектор) , или проблема с подтяжкой(у меня подтянуто к + HOLD, DO), помехами. Возможно стоит попробовать другой шаблон (AT45DB642D.с), проблема скорее всего связана с обработкой статуса.


AlexTA, огромное спасибо за помощь.
Действительно пришлось поправить 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.с этот нюанс учтен.
Еще раз спасибо за помощь!

А fformat("F0:","") - придется поизучать. Пока не заработал.
После тестов выложу нормальные файлы для AT45DB161D. Вдруг кому пригодятся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 22 апр 2019, 10:28 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1762
Обычно читают SFDP и там есть вся информация про флэш.
Например в драйвере SPIFBlockDevice из mbed.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB