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

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

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

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

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

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


 
Опции темы
Непрочитано 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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.RU
 
Регистрация: 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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 6166 19.02.2024 18:22
Подключение 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, время: 04:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot