Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.08.2012, 11:22  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Mega32+SD

Не нашёл у автора установку размера блока CMD16(SET_BLOCKLEN), он определённо уверен, что бывает только 512 байт.
А это вообще шедеврально
Код:
171. temp=spi_receive();
172. if ((temp&0x05)!=0x05) return 6;  //Выйти, если данные не приняты
т.е. всё хорошо будет в двух случаях:

Data Response Token =
'00101' - Data accepted.
'01101' - Data Rejected due to a Write Error

Forusfut, посмотрите, что в temp на самом деле приходит.
Реклама:

Последний раз редактировалось AJScorp; 27.08.2012 в 11:25.
AJScorp вне форума  
Непрочитано 27.08.2012, 12:08  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: Mega32+SD

Forusfut
Это с примера используемого Вами:
Рассмотрим процесс инициализации карты памяти командами CMD0,CMD1. Сперва, при высоком уровне на выводах CS и DI подаем 80 тактовых импульсов на вывод CLK. Далее на все время работы с картой сажаем CS на землю, подаем команду CMD0, контрольная сумма для которой равнa 0x95 (контрольная сумма в нашем случае нужна только для команды CMD0, в остальных случаях она не проверяется, поэтому все время будем использовать 0х95 как контрольную сумму). Далее, после байтовой паузы, карточка должна ответить 0х01, что означает, что она вошла в SPI режим и готова принимать команды. Теперь подаем команды CMD1, и после паузы ожидаем от карточки ответа 0х00, которые говорит о том, что карта готова к обмену данными.

А вот это кусок кода, не тут ли собака зарыта, мне это тоже интересно, почитал, не смог связать описание инициализации вот с этими кусками, поправьте люди добрые:
Цитата:
//Программа передачи байта карте SD|MMC
void spi_transmit (unsigned char data)
{
unsigned char i;
for (i=0;i‹8;i++) //Цикл перебора битов отправляемого байта
{
if ((data&0x80)==0x00) //Если все данные переданы
PORTB&=~_BV(DI); //Выставить бит данных
else
PORTB|=_BV(DI);
data=data‹‹1;
PORTB|=_BV(CLK); //Импульс
asm("nop"); //Пауза в 1 такт
PORTB&=~_BV(CLK);
}
}

unsigned char sd_card_init(void)
{ unsigned char i,temp;
long int count;

if ((PINB&_BV(INS))!=0x00) return 1; //Проверка карты в слоту

for (i=0;i‹10;i++) //80 импульсов
spi_transmit (0xff);
PORTB&=~_BV(CS); //CS опустить

temp=sd_cmd (0x40,0x00,0x00,0x00,0x00,0x95); //CMD0
if (temp!=0x01) return 3; //Выйти, если ответ не 0х01
spi_transmit (0xff);

count=0;
do{
temp=sd_cmd (0x41,0x00,0x00,0x00,0x00,0x95); //CMD1
spi_transmit (0xff);
count=count+1;
} while ( (temp!=0x00)&&(count‹0xffff) ); //Ждем 0x01 ответа R1

if (count›=0xffff) return 4;
return 0;
}
gres_go вне форума  
Непрочитано 27.08.2012, 12:21  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Mega32+SD

Сообщение от gres_go Посмотреть сообщение
не смог связать описание инициализации вот с этими кусками
Что именно смущает?
Простейшая инициализация, подходит для MMC и SD v1.x. SD v2.0 и SDHC работать не будут.
AJScorp вне форума  
Непрочитано 27.08.2012, 12:44  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: Mega32+SD

Сообщение от AJScorp Посмотреть сообщение
Что именно смущает?
Вот это смущает, я слаб в СИ. но все же:
Код:
for (i=0;i‹10;i++) //80 импульсов
spi_transmit (0xff);
gres_go вне форума  
Непрочитано 27.08.2012, 12:46  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Mega32+SD

for (i=0;i‹10;i++) spi_transmit (0xff); //80 импульсов

Можно и так написать, работать одинаково будет.
AJScorp вне форума  
Непрочитано 27.08.2012, 12:52  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: Mega32+SD

Сообщение от AJScorp Посмотреть сообщение
Можно и так написать, работать одинаково будет.
Я не об этом, в цикле 10 раз выполняется передача 255, где 80 импульсов?
Извините, видимо я чего то не догоняю совсем, поясните пожалуйста
gres_go вне форума  
Непрочитано 27.08.2012, 13:00  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Mega32+SD

10 байт х 8 бит = 80 тактовых импульсов на вывод CLK.

PORTB|=_BV(CLK); //Импульс
asm("nop"); //Пауза в 1 такт
PORTB&=~_BV(CLK);
AJScorp вне форума  
Сказали "Спасибо" AJScorp
gres_go (27.08.2012)
Непрочитано 27.08.2012, 13:02  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: Mega32+SD

ООО, понял, вот он тик:
Код:
PORTB|=_BV(CLK); //Импульс
asm("nop"); //Пауза в 1 такт
PORTB&=~_BV(CLK);
И выполняется он 10 раз по 8, тока непонятно зачем так мутно все...
Цикл 80 раз, в цикле бит установить в единицу и после нопа инвертировать его...
gres_go вне форума  
Непрочитано 27.08.2012, 13:03  
gres_go
Прописка
 
Аватар для gres_go
 
Регистрация: 16.02.2008
Адрес: Россия, Омск
Сообщений: 202
Сказал спасибо: 115
Сказали Спасибо 64 раз(а) в 46 сообщении(ях)
gres_go на пути к лучшему
По умолчанию Re: Mega32+SD

AJScorp
Спасибо большое, одновременно написали
gres_go вне форума  
Непрочитано 27.08.2012, 15:26  
Forusfut
Частый гость
 
Регистрация: 25.08.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Forusfut на пути к лучшему
По умолчанию Re: Mega32+SD

Сообщение от Алекс Василич Посмотреть сообщение
В контроллере есть аппаратный SPI, зачем себе жизнь усложнять программной эмуляцией, как делал автор той статьи?
При встрече спрошу Другого более внятного и для того, чтобы начать примера не нашёл, вот с этой статьёй и учусь. Куча народа же написало, что всё работает. Далее на том сайте у этого же автора примеры и с файловой системой FatFs от мистера ChaN. Эти примеры у меня тоже не работают. Пока так. Буду дальше пробовать и искать.
Forusfut вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход


Часовой пояс GMT +4, время: 08:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot