|
|
  |
SD Card - програмная реализация интерфейса, У кого нибудь есть примеры реализации взаимодействия с SD Card? |
|
|
|
Nov 4 2008, 21:03
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(aaarrr @ Nov 4 2008, 21:58)  Тогда выложите получившийся вариант. И желательно без загадок типа "SPI_MODE". Кароче есть ещё офигенная фича: скорость инициализации карточки по SPI не более 200кГерц(у меня на 200 уже не пахало). Если сразу, после подачи питания, пихать данные карточке со скоростью 20МГц, она ничерта не принимает. Больше со своей стороны глюков не видел.В EFSL есть исходник для работы на атмеге.Заменить передачу/приём байтов на свой и усё как по маслу.
|
|
|
|
|
Nov 5 2008, 07:23
|

Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059

|
Вощем добил работу с картой. Испытал создание директории, создание файла, запись в файл. Все работает только с задержками. Скорость инициализации ставил от 188 до 400 кГц - все равно требует задержки. Token отлавливаю софтовым SPI, как рекомендовал QuickWitted  (http://www.swordgreenline.narod.ru/BookReader.html), иначе все 3 мои карточки не отвечают нормально. Использовал FatFs. Интерфейс карты портирован с EFSL. Проц - SAM7S64 Плата - самопал Карты - MMC Canon 16 MB, microSD SanDisk 512MB, SDHC Transdent 2MB Дисплей - LS020 от Siemens S65 IDE - IAR 5.2 Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект. Если, уважаемый aaarrr, посмотрите, буду весьма признателен.
CarController.rar ( 214.01 килобайт )
Кол-во скачиваний: 356
|
|
|
|
|
Nov 5 2008, 10:54
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(aaarrr @ Nov 5 2008, 00:19)  Такого ограничения нет. В режиме инициализации скорость должна быть не более 400kHz, но только для обеспечения совместимости с MMC, картам SD все равно. Не может такого быть, я на SD как раз и пробовал, может какая старая была, ещё на 32 метра. Ставлю передачу больше 200 кГц и не инициализируется. Зато если инит на 150кГц, а уже потом 20МГц то всё ок.
|
|
|
|
|
Nov 6 2008, 11:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861

|
Цитата(John Silver @ Nov 5 2008, 10:23)  Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект.
Если, уважаемый aaarrr, посмотрите, буду весьма признателен. Хотя просили и не меня... Посмотрел. У вас функция xmit_spi() оставляет после себя невычитаные данные. Если уж так хочется посылать и не ждать приема (хотя ждать там не долго) перепишите функцию отправки с приемом как-нибудь так Код static BYTE rcvr_spi (char dat) { char res; if (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF) res = (BYTE)( AT91C_BASE_SPI->SPI_RDR ); while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE==0); AT91F_SPI_PutChar (AT91C_BASE_SPI, dat, 1); while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF==0); res = (BYTE)( AT91C_BASE_SPI->SPI_RDR ); Delay_mks(100); return res; } Т.е. проверяйте, не осталось ли с прошлой посылки что-то непрочитанное.
--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
|
|
|
|
|
Nov 6 2008, 11:37
|

Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059

|
Спасибо за ответ. Попробую, хотя меня берут сомнения в целесообразности. Ведь я пользуюсь только функцией rcvr_spi, и в конце всегда вычитываю буфер приема, откуда взяться невычитанным данным. Или я что-то не учел? Нашел баг в либе FatFs. Код Fres = f_getfree(0, &p1, &pfs); CardSize = (DWORD)(pfs->max_clust - 2) * pfs->csize / 2; FreeSize = p1 * pfs->csize / 2; BuzySize = CardSize - FreeSize; Для MMC и SDv1 свободное место считает нормально. Для SDv2 - врет (карта почти пустая, а из 2 ГБ высчитывает свободных ~200 кБ).
Сообщение отредактировал John Silver - Nov 6 2008, 11:47
|
|
|
|
|
Nov 7 2008, 23:14
|

Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059

|
Шлейф, примерно 10 см. MOSI и CLK идут сначала на дисплей, с него на карту. MISO и CS сразу на карту.
На 400 кГц инициализация не проходит, всмысле, довольно низкая частота. А вообще, конечно, надо будет напрямую к разъему подпаяться короткими проводами, авось сдесь собака и порылась.
Сообщение отредактировал John Silver - Nov 7 2008, 23:20
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|