Easyelectronics.ru

Электроника для всех
Текущее время: 06 дек 2019, 02:47

Часовой пояс: 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 Кб]
Скачиваний: 200
stm32_f10x_SD_SPI.c [7.25 Кб]
Скачиваний: 79
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 11 июл 2019, 22:02 
Старожил

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


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

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


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

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 192
Вот тема про карты 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 Кб]
Скачиваний: 192
diskio.c [22.66 Кб]
Скачиваний: 191
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD cards проблемы.
СообщениеДобавлено: 18 июл 2019, 01:12 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 192
Цитата:
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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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