Контрактное производство электроники. Полный цикл работ
Новичок
 
Регистрация: 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 или может я чего не понял, ведь прога автора говорит, что иниализация прошла успешно.
Оценка
Растущие требования к эффективности, компактности и надёжности в промышленной автоматизации, телекоммуникациях, дата-центрах и электротранспорте делают карбид кремния (SiC) не просто альтернативой кремнию, а ключевым инструментом инженерных решений. Китайские производители предлагают SiC-диоды и транзисторы, сопоставимые по характеристикам с мировыми аналогами при оптимизированной стоимости. В каталоге КОМПЭЛ представлен широкий выбор SiC-дискретов, доступных со склада для ваших проектов.
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

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