реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SAM7+MMC
Neyron
сообщение Feb 18 2008, 15:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-06-06
Пользователь №: 17 841



Начал осваивать AT91SAM7S256. Не могу увидеть ММСшку. Правильно ли написана программа(сборка фрагментов программ из форумов и даташитов).
void initSPI (void)
{
//направляем ноги SPI
pPIO->PIO_ASR = AT91C_PA14_SPCK | AT91C_PA12_MISO | AT91C_PA13_MOSI |AT91C_PA11_NPCS0;
pPIO->PIO_PDR = AT91C_PA14_SPCK | AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA11_NPCS0;
// запускаем SPI генератор
pPMC->PMC_PCER = 1<<AT91C_ID_SPI;
//Отключение с перегрузкой SPI
pSPI->SPI_CR = AT91C_SPI_SPIDIS | AT91C_SPI_SWRST;
//Режим мастера
pSPI->SPI_MR = AT91C_SPI_MSTR;
//8bit, CPOL=0, ClockPhase=1, SCLK = 76kHz ;
pSPI->SPI_CSR[0] = /*AT91C_SPI_NCPHA + */0xff<<8;
//отключение прерываний
pSPI->SPI_IDR = 0xffffffff;
//включение SPI Enable
pSPI->SPI_CR = AT91C_SPI_SPIEN;
}

char initMMC (void)
{
int i;
initSPI();
set_CS(); // CS - отдельная нога чипселекта РА8. Родной SPIевский дёргается вхолостую.
wait();
for(i=0;i<=9;i++) spiSendByte(0xff);
clr_CS();
spiSendByte(0x40);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0x95);
if(mmcGetResponse()!=0x01) {set_CS(); return 1;}// !!!!! вываливается уже из этого места
set_CS();
spiSendByte(0xFF);
clr_CS();
i = 0xff;
do
{
spiSendByte(0x41);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0x00);
spiSendByte(0xFF);
i--;
}
while( (mmcGetResponse()!=0x00) || ( i > 0 ));
if(!i) {set_CS();return 1;}
set_CS();
spiSendByte(0xFF);
return 0;
}

int main (void)
{
int i=0;
unsigned char j=0;
pPIO->PIO_PER=0xFFFFFFFF;//PIO enale
pPIO->PIO_OER=0x0000010F;
pPIO->PIO_ODR=0xFFFFFEF0;
pPIO->PIO_IFDR=0xFFFFFFFF;
pPIO->PIO_SODR=0x0000010F;
pPIO->PIO_CODR=0xFFFFFEF0;
pPIO->PIO_IDR=0xFFFFFFFF;
pPIO->PIO_MDDR=0xFFFFFFFF;
pPIO->PIO_PPUDR=0xFFFFEFFF;// pull-up for MISO
pPIO->PIO_ASR=0xFFFFFFFF;
pPIO->PIO_OWER=0x0000010F;
pPIO->PIO_OWDR=0xFFFFFEF0;

if( initMMC() == 1 )
pPIO->PIO_SODR=2;
else
pPIO->PIO_CODR=2;
while(1) {}
}

На осциллографе вижу все сигналы, но от ММС ответа нет...
crying.gif
Go to the top of the page
 
+Quote Post
Neyron
сообщение Feb 19 2008, 09:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-06-06
Пользователь №: 17 841



Похоже, есть свет в конце тоннеля.
Цитата(Neyron @ Feb 18 2008, 19:44) *
//8bit, CPOL=0, ClockPhase=1, SCLK = 76kHz ;
pSPI->SPI_CSR[0] = /*AT91C_SPI_NCPHA + */0xff<<8;

pSPI->SPI_CSR[0] = AT91C_SPI_NCPHA | (0xff<<8);
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016