Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32+SDIO+SDHC16Gb

Непрочитано 10.12.2015, 13:29  
HardWareMan
Частый гость
 
Регистрация: 13.07.2006
Сообщений: 34
Сказал спасибо: 6
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
HardWareMan на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от black27512 Посмотреть сообщение
Косяк с адресацией там исправлен (собственно косяк чисто в том, что адрес передается в uint32 и т.к. он передается не в блоках, а в байтах то для SDXC 32 бита не хватает для полной адресации, достаточно перейти на тип uint64 и всё норм будет).
А зачем мне вводить uint64 в системе, который его не поддерживает нативно? К слову, пример, который использовал я (мультиблок был уже пофиксен) там уже стоял uint64. И как выяснилось при отладке FatFS успешно вычитывала бут сектор раздела непонятно откуда (у меня малые карты были с одним разделом на всю карту а 64ГБ имеет технологический гап между таблицей разделов и рабочим разделом в 32,5ГБ). И я убрал это мракобесие uint64 и поставил вот такой код в начало функции:
Код:
  if ( (CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) | (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0) )
  {
    ReadAddr *= BlockSize;
  }
А вам искренне желаю не напороться на порчу данных на карте SDXC за границей в 32ГБ.
Реклама:
HardWareMan вне форума  
Непрочитано 10.12.2015, 13:34  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Странная какая-то запись.
STM32F0 вне форума  
Непрочитано 10.12.2015, 14:10  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Ну вот у Чена в примере той же diskio.c есть запись
Цитата:
if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
Как раз для таких случаев.
И даже в той же SPL/HAL
Цитата:
if (CardType == SDIO_HIGH_CAPACITY_SD_CARD)
{
BlockSize = 512;
ReadAddr /= 512;
}
Так как SPL/HAL хочет абсолютный адрес и затем преобразует к адресу блока.

Последний раз редактировалось realid; 10.12.2015 в 14:13.
realid вне форума  
Непрочитано 10.12.2015, 16:34  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Hives Посмотреть сообщение
realid
карта может вернуть статус SD_TRANSFER_OK и не быть готовой к записи
а вот для готовности там есть еще один бит статуса - READY_FOR_DATA (в реплике R1)
который и надо мониторить (дополнительно к TRAN состоянию)

PS за подробностями - в описание протокола SD, пункт 4.3, Write Data
В спецификации сказано, что данная информация содержится в регистре CSR (Card Status Register). Однако в библиотеке Chan'a он, вообще, никак не фигурирует:

А в библиотеке для STM (функция MMC_disk_ioctl()) отсутствует реализация опроса даже для тех регистров, что есть у Chan'a: http://paul.rutgers.edu/~cwills/glid...n_2mmc_8c.html

Как, тогда, реализовать данный запрос к SD?

Последний раз редактировалось Vitaliki; 10.12.2015 в 16:58.
Vitaliki вне форума  
Непрочитано 10.12.2015, 17:09  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Библиотека Чана тут вообще ни при чем. Она о SD карте (и прочих слоях уровня diskio) ничего не знает.
В моей (допиленной) версии делается опрос по CMD13 перед записью и проверяется готовность к приему данных.

пример:
Код:
DiskTimer2 = SD_CARD_READY_TIMEOUT;
do
  {
  Result = SD_SendCmd(SD_CMD13, ((u32) SD_CardAddr) ‹‹ 16, SD_RESPONSE_SHORT, SD_REPLY_R1);
  Status = SDIO-›RESP1;
  }
while ((DiskTimer2) && (Result == SD_RESULT_OK) && ((Status & SD_R1_READY_FOR_DATA) == 0));
if (!DiskTimer2) Result = SD_RESULT_READY_TIMEOUT;
Hives вне форума  
Непрочитано 10.12.2015, 17:15  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Vitaliki Посмотреть сообщение
В спецификации сказано, что данная информация содержится в регистре CSR (Card Status Register). Однако в библиотеке Chan'a он, вообще, никак не фигурирует:
А в библиотеке для STM (функция MMC_disk_ioctl()) отсутствует реализация опроса даже для тех регистров, что есть у Chan'a: http://paul.rutgers.edu/~cwills/glid...n_2mmc_8c.html

Как, тогда, реализовать данный запрос к SD?
В какой библиотеке Чена? FatFs это библа файловой системы? Она не работает с SD картой, она работает с данными на этой карте через низкоуровневые функции которые должны предоставить вы(может у чана есть пример их, но это не библа) и указываете их в файле diskio.c для основных операция чтения, записи и иницализации и тп.
Вот что у Чана написано по этому поводу.
Цитата:
Since the FatFs module is a file system layer, it is completely separated from the physical devices, such as memory card, harddisk and any type of storage devices. FatFs accesses the storage devices via a simple interface shown below. The low level device control module is not a part of FatFs module. It is provided by implementer. Also sample implementations for some platforms are available in the downloads.
В SPL/HAL для этого есть функция SD_GetStatus() или BSP_SD_GetStatus().
realid вне форума  
Непрочитано 10.12.2015, 17:30  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Hives Посмотреть сообщение
realid
карта может вернуть статус SD_TRANSFER_OK и не быть готовой к записи
а вот для готовности там есть еще один бит статуса - READY_FOR_DATA (в реплике R1)
Спасибо за пояснения!
Значит, нам нужно, чтобы функция SD_GetStatus() возвращала значение SD_CARD_READY?

Последний раз редактировалось Vitaliki; 10.12.2015 в 17:35.
Vitaliki вне форума  
Непрочитано 10.12.2015, 19:27  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Vitaliki Посмотреть сообщение
Спасибо за пояснения!
Значит, нам нужно, чтобы функция SD_GetStatus() возвращала значение SD_CARD_READY?
Нет, она возвращает только SD_TRANSFER_OK, SD_TRANSFER_ERROR и SD_TRANSFER_BUSY.
SD_TRANSFER_OK возвращает только, если карта находится в Transfer State, иначе вернет SD_TRANSFER_BUSY. Кстати, в этой функции бит READY_FOR_DATA не проверяется.
realid вне форума  
Непрочитано 10.12.2015, 20:50  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от realid Посмотреть сообщение
Нет, она возвращает только SD_TRANSFER_OK, SD_TRANSFER_ERROR и SD_TRANSFER_BUSY.
SD_TRANSFER_OK возвращает только, если карта находится в Transfer State, иначе вернет SD_TRANSFER_BUSY. Кстати, в этой функции бит READY_FOR_DATA не проверяется.
Так я о том и спрашиваю, что нам эту проверку добавить сюда надо? Или лучше доп. функцию сделать? Но, чтобы проверить этот бит READY_FOR_DATA нужно сделать запрос по CMD13.
Есть следующая функция:
// pcardstatus: pointer to the buffer that will contain the SD card
// status (Card Status register).
SD_SendStatus()

Что дальше нужно сделать, чтобы получить состояние этого бита?
Vitaliki вне форума  
Непрочитано 10.12.2015, 21:02  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Ну так по идее, если функция SD_SendStatus(&resp1) вернет SD_OK, то в resp1 будет статус. Бит READY_FOR_DATA 8-ой.
realid вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6171 20.05.2025 20:16
Подключение DS18b20 к STM32 aftaev ARM 85 22.11.2016 10:58
Драйвер (не VCP) для встроенного USB STM32 vvv998 ARM 106 08.11.2014 21:36
sdio stm32 banzayy ARM 2 16.09.2013 18:05
Проблема с ST-LINK +KEIL + STM32 LionRJ Микроконтроллеры, АЦП, память и т.д 5 06.03.2012 17:21


Часовой пояс GMT +4, время: 05:44.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.