Например TDA7294

Форум РадиоКот :: Просмотр темы - Драйвер для MICRO_SD карт
Форум РадиоКот
http://radiokot.ru/forum/

Драйвер для MICRO_SD карт
http://radiokot.ru/forum/viewtopic.php?f=59&t=91454
Страница 2 из 6

Автор:  osievskiy [ Вс июн 30, 2013 19:09:30 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

И так добился ЧТО SD_INI возвращает 4, но SD_READ и SD_WRITE возвращает 1

При SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
SD_WRITE возвращает 255
SD_READ = 1


И еще маленький нюанс. Если выключить от USB контроллер и включить то SD_INI возвращает 0 и если потом нажать на reset то уже возвращает 4.

проблему с возвращением SD_INI 0 после отключения USB решил.
Переставил
Код:
GPIO_PinAFConfig(GPIOA,SD_SPI_SCK_SOURCE,GPIO_AF_SPI1);
  GPIO_PinAFConfig(GPIOA,SD_SPI_MISO_SOURCE,GPIO_AF_SPI1);
  GPIO_PinAFConfig(GPIOA,SD_SPI_MOSI_SOURCE,GPIO_AF_SPI1);


до

Код:
GPIO_Init(GPIOA, &GPIO_InitStructure);

Автор:  Oxford [ Вс июн 30, 2013 21:04:14 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Карта какая? фотку выложите если можно. Емкость.
SD_INI говорит что она MMC карта либо старая какая то, но похоже что контакт есть.
Получается инит проходит.

Читает пишит?

У меня карты работают так
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
и так
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;

в других режимах нет.


.....
SD_WRITE возвращает 255 - исправил в коде. Это должно было быть 1. Ошибку исправлю в коде.

Автор:  osievskiy [ Вс июн 30, 2013 21:12:26 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Изображение

Вот такая карта на 128 Mb

есть еще на 2G INI возвращает 2
и есть на 512Mb INI возвращает 1

Все не читаются и не пишутся

Автор:  Oxford [ Вс июн 30, 2013 21:18:14 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Покажите код чтения и записи. Не может быть карты правильно определяются.

Попробуй те закоментировать строку
SPI_SETUP(SPI_BaudRatePrescaler_2);
в процедуре SD_INI может скорость превышается SPI. там что-то не выше 20-25 мгц должно

Автор:  osievskiy [ Вс июн 30, 2013 21:19:49 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт



вот весь код

Автор:  Oxford [ Вс июн 30, 2013 21:25:04 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

CS подтяните тоже.
Я про Main где вы вызываете чтение и запись и выводите числа из буфера. Я смотрю переменные переименовали зачем то. Модуль просто подключили бы и все.

Автор:  osievskiy [ Вс июн 30, 2013 21:32:45 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Переменные переименовал потому что у меня такие есть для TFT... там регистры записаны

Код:
   int resultInit = SD_INI();

      
   
   myLCD.drawString(resultInit, 0, 30);
   //myLCD.drawString(SPI_SEND(0xAA), 0, 60);
   
   
      int resultRead = SD_READ(256);

      myLCD.drawString(resultRead, 0, 90);
   
      for(int i=0; i < 5; i++)
      {

          myLCD.drawString(BUFFER[i], 15*i, 120);

      };

      BUFFER[0] = 'S';
      BUFFER[1] = 'D';
      BUFFER[2] = 'F';

      int resultWrite = SD_WRITE(256);   
           myLCD.drawString(resultWrite, 0, 180);

Автор:  Oxford [ Вс июн 30, 2013 21:42:00 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Я так понял чтение 1 возвращает?
Попробуй те закоментировать строку
SPI_SETUP(SPI_BaudRatePrescaler_2);
в процедуре SD_INI может скорость превышается SPI. там что-то не выше 20-25 мгц должно
Возможно скорость бешенная так как у F4 42 Мбита, а на M0 16мбит скорее всего скорость превышена.
Вставьте в процедуру чтения вывод буквы, и проследите где возврат происходит.

Автор:  osievskiy [ Вс июн 30, 2013 21:46:19 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Oxford писал(а):
Я так понял чтение 1 возвращает?
Вы установку скорости закоментировали в конце SD_INI. Возможно скорость бешенная так как у F4 42 Мбита, а на M0 16мбит скорее всего скорость превышена.
Вставьте в процедуру чтения вывод буквы, и проследите где возврат происходит.




Вот здесь if (SPI_CMD(17, sector, 0x0, 0x00)) return 1;

Автор:  Oxford [ Вс июн 30, 2013 21:47:06 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

osievskiy писал(а):
Oxford писал(а):
Я так понял чтение 1 возвращает?
Вы установку скорости закоментировали в конце SD_INI. Возможно скорость бешенная так как у F4 42 Мбита, а на M0 16мбит скорее всего скорость превышена.
Вставьте в процедуру чтения вывод буквы, и проследите где возврат происходит.




Вот здесь if (SPI_CMD(17, sector, 0x0, 0x00)) return 1;


Ну правильно потому что контроллер карты не ответил правильно вот и выходит.
если связь с картой нормальная, он эту команду должен пролетать на всех парусах. )))

Связи нет с картой при чтении записи.

SPI1 can communicate at up to 42 Mbits/s, SPI2 and SPI3
can communicate at up to 21 Mbit/s. Вот из даташита на камень о скоростях.
Для карты надо не выше 25

Автор:  osievskiy [ Вс июн 30, 2013 21:53:18 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Закомментировал SPI_SETUP(SPI_BaudRatePrescaler_2);

Теперь чтение показывает 1
Запись показывает 255

Но чтение уже вот тут
Код:
while(SPI_SEND(0xFF) != 0xFE) //?????? ??????
  if(RSD1++ > 0xFFFE)
  {
     DECS();
     return 12;
  }

Автор:  Oxford [ Вс июн 30, 2013 21:57:07 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

osievskiy писал(а):
Закомментировал SPI_SETUP(SPI_BaudRatePrescaler_2);

Теперь чтение показывает 1
Запись показывает 255


Еще попробуй те читать и писать с закоменнтированной строкой
if (CADR_TYPE != SD_VER2HC) sector *= 512;

Еще в циклы чтения поставьте паузы небольшие.
while(SPI_SEND(0xFF) != 0xFE) //НАЧАЛО ДАННЫХ
{
_delay(1000);
if(R1++ > 0xFFFE)
{
DECS();
return 1;
}
}

Это на всех картах так?
Вы через шилд работаете?
Странное поведение какое то
......

Еще вот что сделай те:
В процедуре SPI_CMD
найдите кусок и вставьте вывод переменной RSD3
while((RSD3 = SPI_SEND(0xFF)) == 0xff)
{
_delay(20000);
if(RSD2++ > 0xFE) return 1;
}
LCD_OUT(RSD3) <<<<<< тут


Когда вызовите READ процедуру посмотрите какое значение она возвращает, после того как отработает команда if (SPI_CMD(17, sector, 0x0, 0x00)) return 1;

Автор:  osievskiy [ Вс июн 30, 2013 22:06:44 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

поставил задержку и убрал if (CADR_TYPE != SD_VER2HC) sector *= 512;


Та же картина!

Автор:  osievskiy [ Вс июн 30, 2013 22:10:28 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Oxford писал(а):
osievskiy писал(а):
Это на всех картах так?
Вы через шилд работаете?
Странное поведение какое то


Вот только что додумался проверить.... не не на всех
на INI 1 и 2
Запись и чтение 0, но данных я не вижу

Автор:  Oxford [ Вс июн 30, 2013 22:13:20 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

MMC пока уберите. Так как у меня не было такой карты и корректность не было возможность проверить.

Оставьте та что 2 или 1
На них чтение и запись срабатывает.
Верните весь код как был и проверяй те сектора на компьютере после записи, допустим пишите в 0 сектор MBR
Только //SPI_SETUP(SPI_BaudRatePrescaler_2); так пусть закоментированная и будет это установка максимальной скорости SPI ее можно превысить и карта отвечать не будет потом отрегулируете. пока на низкой пусть будет.

Автор:  osievskiy [ Вс июн 30, 2013 22:23:38 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Так, записал в 63 сектор так как флешка с него начинается... сбилась файловая система... думаю это знак что на нее что то пишется))

Автор:  Oxford [ Вс июн 30, 2013 22:26:32 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Тестируй те проверяйте, код отлаживался на Micro SD картах 1 и 2 версии.
У меня работает все четко. Я проект пишу MP3 проигрывателя на VS1011E. Скоро FAT еще буду писать, на Delphi готовая лежит. перенести надо.
Скорость SPI не превышай те.

Автор:  bishop-strip [ Вс июн 30, 2013 22:36:49 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Здравствуйте!Скажите, а как я могу работать с SD карточкой на уровне файлов, а не адресов памяти?
Допустим на карточке есть файлы, как я могу узнать, какие они, считывать их и записывать в карту свои файлы?
Заранее спасибо!

Автор:  osievskiy [ Вс июн 30, 2013 22:37:53 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

нужно к этому коду еще прикрутить FatFs

Сейчас кстати этим и занимаюсь!

Автор:  osievskiy [ Пн июл 01, 2013 01:32:12 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Потратив на это почти 3 часа я все таки связал это все с Fatfs и это все даже работает.... кому нужно будет пишите выложу...

Страница 2 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/