AC-DC и DC-DC преобразователи напряжения Top Power на складе ЭЛТЕХ
Новичок
 
Регистрация: 29.06.2009
Сообщений: 101
Репутация: 20
10 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 посажены на общую шину
Оценка
Мониторинг и контроль температуры необходимы во многих устройствах и приборах. Сложно найти электронную систему, в которой не присутствовал бы тот или иной температурный датчик. Многие азиатские производители производят датчики, которые не уступают по качеству популярным западным решениям и выгодно отличаются от них по цене. Каждая из компаний обладает большим опытом в производстве микроэлектронных приборов и имеет мощные отделы разработки и контроля качества. Они предлагают не только свои разработки, но также функциональные и Pin-to-Pin-аналоги популярных датчиков западных компаний в конструктивных исполнениях для самых разнообразных областей применения.
Специалист
 
Аватар для 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, просьба пройти в кабину пилота.
Оценка
Компания Chipown представила высокоскоростной драйвер PN7113 для управления N-канальными транзисторами MOSFET или IGBT, работающими в полумостовой топологии. Микросхема является Pin-to-Pin совместимым аналогом популярных западных драйверов хх2110, хх2113 и хх2112, но при этом имеет существенное преимущество – более доступную цену. В статье приведен детальный разбор сравнительных параметров драйверов PN7113 и хх211x, их электрических характеристик, а также схем включения, цоколевки и описания выводов.
Новичок
 
Регистрация: 29.06.2009
Сообщений: 101
Репутация: 20
10 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 или может я чего не понял, ведь прога автора говорит, что иниализация прошла успешно.
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

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