Easyelectronics.ru

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

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



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

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: SD cards проблемы.
СообщениеДобавлено: 11 июл 2019, 10:45 
Здравствуйте!

Зарегистрирован: 11 июл 2019, 10:13
Сообщения: 4
Здравствуйте!
Имеется задача записывать данные на какую либо флешку, для дальнейшего чтения этих данных на ЭВМ. Я решил вести запись на SD карточку через SPI, использую STM32f103c8. Пишу посекторно, без файловой системы.
Однако, столкнулся с проблемами
1 - (sandisk 2 gb) на первой карточке время записи не одинаковое, от 5 до 65 миллисекунд, причем прослеживается хорошая такая периодичность, каждый 8й сектор пишется 65 миллисекунд, остальные по 5 мс. И черт бы с ним, но мне нужно писать на карту по 500 байт с частотой 100 гц. И задержка все портит. Так же спустя какое то время(секунды) карточка отключается и её нужно снова инициализировать.
2 - (Kingston 8gb)на второй карте, карта так же отключается спустя некоторое время(десятки секунд), и её снова нужно инициализировать.
3 - (elite pri 4gb)на этой карте время записи само по себе большое(20 мс), и так же отключается.
А так же есть карточка на 16 гб, которую не могу инициализировать.
Может быть кто-нибудь подскажет куда капать.
Имею предположение что кривой драйвер, но найти косяки не хватает знаний и опыта....
Прикрепляю используемый драйвер (осторожно, опасно для психики!)


Вложения:
stm32_f10x_SD_SPI.h [1.85 Кб]
Скачиваний: 105
stm32_f10x_SD_SPI.c [7.25 Кб]
Скачиваний: 76
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 11 июл 2019, 22:02 
Старожил

Зарегистрирован: 13 июл 2016, 11:05
Сообщения: 413
а если просто использовать стандартные средства? Fatfs?
Вроде есть примеры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 12 июл 2019, 12:48 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 129
Задержки при записи, это контроллер карты стирает сектора для записи, это нормально. Тут где-то есть тема про работу с sd на десяток страниц, там обсуждали это и есть примеры драйверов.
Насколько я понял, вам надо писать примерно 50кб в секунду. Используйте буфер в памяти для накопления данных, а потом записывайте сразу большим блоком используя DMA в multiblock режиме. Одиночными секторами очень медленно будет.
Если будет не хватать скорости, у f103 есть SDIO для работы с картами.
Для работы с сохраненными данными лучше сразу их писать в файлы, а не просто в сектора карты. Вам же как-то надо будет разделять записи. Т.е. по сути свою файловую систему придумывать. Зачем этот велосипед, попробуйте FATfs, если конечно в контроллере хватит ресурсов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 12 июл 2019, 12:51 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 129
Вот тема про карты viewtopic.php?f=35&t=10358


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 14 июл 2019, 18:55 
Здравствуйте!

Зарегистрирован: 11 июл 2019, 10:13
Сообщения: 4
Sergey_spb писал(а):
1.у f103 есть SDIO для работы с картами.
2. Для работы с сохраненными данными лучше сразу их писать в файлы, а не просто в сектора карты. Вам же как-то надо будет разделять записи. Т.е. по сути свою файловую систему придумывать. 3. Зачем этот велосипед, попробуйте FATfs, если конечно в контроллере хватит ресурсов.

1. у моего камня нет sdio.
2. это не важно.
3. FATFs не будет работать быстрее драйвера что у меня есть, тем более что FATFS у меня уже прикручена давно, и через неё запись происходит сильно дольше чем посекторно напрямую.
Sergey_spb писал(а):
Задержки при записи, это контроллер карты стирает сектора для записи, это нормально. Тут где-то есть тема про работу с sd на десяток страниц, там обсуждали это и есть примеры драйверов.

За это спасибо!
Единственное что нашлось по делу это
"Как выяснилось, что бы мультиблок был эффективен оказывается нужно записывать мноооого блоков, а не 4 кб как у меня. Ну а ОЗУ не резиновое, так что думаю решить только путем нарезки функции на куски и не прерывая цепочку мультиблоков записывать уже приличные объемы.
Вся причина в задержке в конце функции SD_WriteMultiBlocks:

/*!< Add some delay before checking the Card Status */
for(count = 0; count < 0xFFFF; count++);

А это не хилая такая задержка. Просто механизм таков, что на самом деле даже указывая количество блоков всё равно это используется только для самой функции, а флешке только сообщается через ACMD23 (задание количества блоков для предстирания), а вот CMD23 (явно указывающая количество блоков на запись/чтение) не используется по причине не поддерживания её большинством флешек (не только SDSC). В итоге всё тормозится CMD12 (Stop Transfer), а т.к. после этого флешка впадает в состояние программирования (записи) последних данных, то видимо кроме как паузой подкараулить момент окончания ни как нельзя.
При убирании паузы сразу с ошибкой выпадает." на стр 8.
Буду экспериментировать с ACMD23, правда только во вт.


Последний раз редактировалось LeonidNsc 14 июл 2019, 21:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 14 июл 2019, 18:56 
Здравствуйте!

Зарегистрирован: 11 июл 2019, 10:13
Сообщения: 4
serglg писал(а):
а если просто использовать стандартные средства? Fatfs?
Вроде есть примеры.

FATFs не будет работать быстрее драйвера что у меня есть, тем более что FATFS у меня уже прикручена давно, и через неё запись происходит сильно дольше чем посекторно напрямую.
Какие стандартные средства вы имеете ввиду?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 17 июл 2019, 10:12 
Здравствуйте!

Зарегистрирован: 11 июл 2019, 10:13
Сообщения: 4
Переписал драйвер с примера к FATFS под свой камень, и все стало ок. Скорость этого драйвера в разы выше чем то что у меня было.


Вложения:
diskio.h [3.17 Кб]
Скачиваний: 96
diskio.c [22.66 Кб]
Скачиваний: 104
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 18 июл 2019, 01:12 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 129
Цитата:
while ((SPIx_SR & 0x83) != 0x03) {ans=SPIx_SR;};


Огонь просто :) Реально воспринимаете, какие именно биты проверяет маска 0x83?
И зачем нужно бесконечное чтение регистра статуса? В других местах, у Вас эта конструкция с пустым циклом.
У Вас код, насколько я понимаю, с использованием HAL или SPL. Зачем Вы тогда не используете их функции?
Если хочется покороче написать, ну так есть же CMSIS.
Вот глядя на Вашу конструкцию, я без даташита не могу понять, что вы делаете.
Если вы шлете больше одного байта, то вам надо подождать пока бит SPI_SR_TXE не станет 1. В этот момент еще идет отправка
предыдущего байта, но можно в SPI->DR уже писать следующий. Так передача будет идти без пауз между байтами.
Про это на хабре статья была, называлась что-то типа "Вы все делаете не так", думаю гугл поможет найти.
Перед тем как закончить обмен и поднять CS, надо дождаться пока передача закончится. Для этого есть бит SPI_SR_BSY.
Если нужен прием, то проверять надо SPI_SR_RXNE
Согласитесь, SPI_SR_TXE выглядит гораздо понятнее, чем какое-то "магическое число".
Собственно ваше волшебное число 0x83 это (SPI_SR_TXE|SPY_SR_RXNE|SPY_SR_BSY), т.е. Ваш цикл ожидания можно было бы заменить на:
Код:
while ((SPIx_SR & (SPI_SR_TXE|SPY_SR_RXNE|SPY_SR_BSY)) != (SPI_SR_TXE|SPY_SR_RXNE)) {};

На мой взгляд немного странная конструкция, если вы ждете окончания приема, зачем Вам TXE флаг? В момент когда
целиком пришел ответ, передача уже ушла и флаг TXE точно стоит (учитывая, что Вы по одному байту передаете, а не потоком).
Можно упростить до:
Код:
while(!(SPIx_SR & SPI_SR_RXNE)){};



С этим кодом Вы свою задачу решили? Удалось писать ~50Кб в секунду? Как-то контролируете, что все записалось, без пропусков?
В первом посте у Вас были с разными картами разные проблемы, решилось?


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

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


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

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


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

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

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