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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 11.02.2014, 09:03  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию ATmega32, программный SPI для карты памяти

Добрый вечер!

Итак, разбираюсь с программным SPI на ATmega32 для работы с картой памяти SD. Главное, что нужно сделать, это функции чтения и записи байта. С картой планируется работать в режиме SPI 0. (За основу взял проект Dharmani, но у него нет программного SPI, а аппаратный у меня занят).

SanDisk Secure Digital Card Product Manual, страница 35:


Как я понял, режим SPI 0 сохраняется только для передачи информации карте, а вот обратно, что это?

Вот какие функции написал:
Код:
#define SPISPEED 8 //period takta SPI, usec

#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1‹‹BIT)) 
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1‹‹BIT)) 
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1‹‹BIT))

#define SWSPI_PORT	PORTC
#define SWSPI_DDR	DDRC
#define SWSPI_PIN	PINC
#define SWSPI_SCK	PC5
#define SWSPI_MOSI	PC6
#define SWSPI_MISO	PC7
#define SWSPI_CS	PC4

#define SETCLK() SETBIT(SWSPI_PORT,SWSPI_SCK)
#define CLRCLK() CLEARBIT(SWSPI_PORT,SWSPI_SCK)
#define SETMOSI() SETBIT(SWSPI_PORT,SWSPI_MOSI)
#define CLRMOSI() CLEARBIT(SWSPI_PORT,SWSPI_MOSI)
#define CLRMISO() CLEARBIT(SWSPI_PORT,SWSPI_MISO)
#define ACTIVE_SPI() CLEARBIT(SWSPI_PORT,SWSPI_CS)
#define PASSIVE_SPI() SETBIT(SWSPI_PORT,SWSPI_CS)

void SWSPI_write_byte (unsigned char byte)
{
	CLRMOSI(); CLRCLK();
	for (unsigned char a=8; a›0; a--) //MSB First
	{
		CLRCLK();
		_delay_us(SPISPEED/4); /* ждём четверть периода */
		if (CHECKBIT(byte,(a-1)))
			SETMOSI(); //Set Output High
		else
			CLRMOSI(); //Set Output Low
		_delay_us(SPISPEED/4); /* ждём четверть периода */
		SETCLK();
		_delay_us(SPISPEED/4); /* ждём четверть периода */
		CLRMOSI();
		_delay_us(SPISPEED/4); /* ждём четверть периода */
	}
	CLRMOSI(); CLRCLK();
}
Для 0xAA (10101010) вот что:


Для приема информации от карты делаю считывание на середине импульса SCK (или по таймингам лучше при спаде?)

Код:
unsigned char SWSPI_read_byte ()
{
	unsigned char RByte = 0x00;
	SETMOSI(); CLRCLK(); CLRMISO();
	for (unsigned char a=8; a›0; a--) //MSB First
	{
		_delay_us(SPISPEED/4); /* ждём четверть периода */
		SETCLK();
		_delay_us(SPISPEED/4);
		if (CHECKBIT(SWSPI_PIN,SWSPI_MISO))	//Check Bit
			RByte |= (1 ‹‹ (a-1)); //Set bit
		_delay_us(SPISPEED/4);
		CLRCLK();
		_delay_us(SPISPEED/4);
	}
	return RByte;
}
Например, передача байта от Slave к Master'у. Не понятно, как (согласно SPI 0) Slave должен начать подтягивать MISO к питанию, если Master еще не подтянул SCK (особенно при первом бите в байте)?
Реклама:

Последний раз редактировалось pavned; 11.02.2014 в 09:16.
pavned вне форума  
Непрочитано 11.02.2014, 11:12  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: ATmega32, программный SPI для карты памяти

Используйте SPI DEBUGGER. Или давайте проект, мы используем.
И что за бред на счет того, что SPI занят? Он же мультиплексируется ногой CS.
Easyrider83 вне форума  
Непрочитано 11.02.2014, 11:23  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,792
Сказал спасибо: 2,912
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: ATmega32, программный SPI для карты памяти

Сообщение от pavned Посмотреть сообщение
SPI, а аппаратный у меня занят
А если уж так сильно занят - можно попробовать USART в синхронном режиме прикрутить.
ForcePoint вне форума  
Непрочитано 11.02.2014, 12:04  
pavned
Прописка
 
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
pavned на пути к лучшему
По умолчанию Re: ATmega32, программный SPI для карты памяти

Сообщение от Easyrider83 Посмотреть сообщение
Используйте SPI DEBUGGER. Или давайте проект, мы используем.
И что за бред на счет того, что SPI занят? Он же мультиплексируется ногой CS.
Вы правы, начать наверное стоит с того, что Ethernet модуль на ENC28J60 И SD модуль ни в какую не получилось запустить на аппаратном SPI. Хотя МК мастер, эти оба слейвы...
pavned вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Кто-нибудь работал с RF модулями nRF2401A? Easyrider83 Автоматика и аппаратура связи 1481 04.09.2021 23:24
Краткий обзор методов помехоустойчивого программирования для Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 0 09.04.2008 01:17
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


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


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