Easyelectronics.ru

Электроника для всех
Текущее время: 02 июн 2020, 11:35

Часовой пояс: 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
Сообщения: 210
Откуда: Украина
Попробовал у себя запустить диск на SPI флешке. Смущает меня отсутствие обмена по SPI при выполнении fmount ("F0:"), если далее выполнять например fformat, то обмен уже есть но завершается с ошибкой - "fsNoMedia".
...Разобрался с "fsNoMedia", система команд немного другая у подопытной W25q80, формат теперь проходит.


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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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
Сообщения: 210
Откуда: Украина
Если система команд у 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 Кб]
Скачиваний: 344
AT45DB161D.c [14.88 Кб]
Скачиваний: 342
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5 + AT45DB161D
СообщениеДобавлено: 21 апр 2019, 20:59 
Старожил

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 210
Откуда: Украина
Опыты 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
Сообщения: 2001
Обычно читают SFDP и там есть вся информация про флэш.
Например в драйвере SPIFBlockDevice из mbed.


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


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


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

Сейчас этот форум просматривают: arhiv_6, Gomer888, kos


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

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

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