Контрактное производство и проектные поставки для российских производителей электроники
Новичок
 
Регистрация: 29.06.2009
Сообщений: 98
Репутация: 20
9 1
0 0
 
25.08.2012 17:25 #1
Доброго времени! Знакомлюсь с работой SD карты в режиме spi. Взял для начала, вот эту статью http://avrlab.com/node/156

Собрал плату, поскольку на плату устанавливается ещё TFT модуль с резистивным экраном, который тоже работает по spi, то выводы немного изменены, не так, как в статье. МК и карта питаются от 3.25В. Программа зашита таже с той страницы. При включение в терминале видно из отчёта три строчки, что карта инициализирована, записана и прочитана далее из массива только три последовательности правильные 0123456789, а остальное в разброс подряд тройки пятёрки, всякие знаки. При просмотре содержимого карты через WinHex этого массива нет. Укажите куда копать, что может быть не так. Снижал скорость до 9600 то же самое.

выводы назначены вот так:
Код:
#define DI   5

#define DO   6

#define CLK  7 

#define CS   3

#define INS  0

#define WP   1
PB0 и PB1 посажены на общую шину
Оценка
КОМПЭЛ представляет заключительную публикацию в серии «АЦП азиатских производителей», посвященную аудио-АЦП. Это отдельный класс сигма-дельта преобразователей, оптимизированных для высококачественной оцифровки звука. В материале – анализ функциональных особенностей аудио-АЦП, а также их технических ограничений и практических аналогов от азиатских производителей, способных заменить популярные бюджетные решения западных брендов без потери надёжности.
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,175
Записей в дневнике: 22
Репутация: 424
412 89
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
26.08.2012 21:52 #2
Насколько я понял, после проверки вашей карты в WinHex - на ней нет записанного блока в 512 байт, заполненного 0123456789. Т.е. запись на карту не прошла в режиме SPI...

Начнем с простого: микроконтроллер сконфигурирован правильно? Fuse-биты, тактовая частота, проверьте подключение карты к мк, не ошиблись ли где подключением...

Скорость UART, которую вы меняли, не причем - это ведь только для связи мк с ПК...
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Высокочастотные трансформаторы — сложный, но ключевой элемент в разработке индуктивных компонентов. Стандартные модели не всегда отвечают задачам современных проектов, а самостоятельная разработка требует значительных ресурсов и экспертизы. Специалисты КОМПЭЛ подготовили эксклюзивный документ, который поможет определить, когда заказные решения становятся оптимальным выбором для вашего проекта. Узнайте, как правильно подойти к созданию уникального компонента, избежать типичных ошибок и сэкономить ресурсы.
Новичок
 
Регистрация: 29.06.2009
Сообщений: 98
Репутация: 20
9 1
0 0
 
26.08.2012 22:01 #3
Да, записи и чтения нет. Да вроде правильно jtag отключен, тактирование внутреннее 8 МГц. Уже не раз перепроверял, да и SPI не встроенный, поэтому особо ошибиться вроде как нельзя.

В процедуры:
Цитата:
unsigned char sd_card_init(void)
{ unsigned char i,temp;
long int count;

if ((PINB&_BV(INS))!=0x00) return 1; //Check card in slot

for (i=0;i<10;i++)
//80 strobes
spi_transmit (0xff);


PORTB&=~_BV(CS); //CS enable

uart_transmit_message("ansver on CMD0:\r\n");

temp=sd_cmd (0x40,0x00,0x00,0x00,0x00,0x95); //CMD0
if (temp!=0x01) return 3; //Exit, if bad responce
spi_transmit (0xff);

count=0;
do{

uart_transmit_message("ancver on CMD1:\r\n");

temp=sd_cmd (0x41,0x00,0x00,0x00,0x00,0x95); //CMD1
spi_transmit (0xff);
count=count+1;
} while ( (temp!=0x00)&&(count<0xffff) ); //Wait 0x01 responce

if (count>=0xffff) return 4;
return 0;
}
Цитата:
unsigned char sd_cmd(char b0, char b1, char b2, char b3, char b4, char b5) //Send command to SD|MMC card
{ unsigned char res;
long int count;
spi_transmit (b0); //transmit index

spi_transmit (b1); //transmit argument
spi_transmit (b2);
spi_transmit (b3);
spi_transmit (b4);

spi_transmit (b5); //transmit CRC
count=0;
do { //wait to R1 responce
res=spi_receive();
count=count+1;

uart_transmit(res);

} while ( ((res&0x80)!=0x00)&&(count<0xffff) );

return res;
}
добавил промежуточный вывод через uart, так вот в процедуре посылки команды, где должно вернуться 0x01 в переменной res, ничего не возвращается, т.е 0 или может я чего не понял, ведь прога автора говорит, что иниализация прошла успешно.
Оценка
Электромеханические реле благодаря надёжности и устойчивости к внешним воздействиям остаются незаменимыми в промышленной автоматике, бытовой технике и энергооборудовании. В условиях ограничений на импорт такие азиатские производители как Hongfa, Sanyou, Forward, NCR и другие успешно заменяет западных поставщиков, предлагая аналогичное качество по более выгодной цене. КОМПЭЛ поддерживает обширную номенклатуру ЭМР на складе – более 600 тыс. штук и около 200 уникальных позиций – от проверенных производителей.
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Часовой пояс GMT +3, время: 12:41.
Обратная связь РадиоЛоцман Вверх