Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ARM9: запуск MCI контроллера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Freeuser
Доброе время суток. Пытаюсь запустить MCI контроллер на sam9xe для работы с SD картой. Но пока что-то не достиг успехов. Вот код инициализации MCI:
Код
void mci_config(void)
{
// Enable peripherial A
AT91C_BASE_PIOA->PIO_ASR =     BIT(6)|BIT(7)|BIT(8)|BIT(9)|BIT(10)|BIT(11);
//Enables the Multi-Media Interface
AT91C_BASE_MCI->MCI_CR=AT91C_MCI_MCIEN;    
// Enable the MCI clock    
AT91C_BASE_PMC->PMC_PCER=(1<<9);    
// Software reset        
AT91C_BASE_MCI->MCI_CR=AT91C_MCI_SWRST;        
// Disable the MCI
AT91C_BASE_MCI->MCI_CR=AT91C_MCI_MCIDIS | AT91C_MCI_PWSDIS;
// Disable all the interrupts
AT91C_BASE_MCI->MCI_IDR=0xFFFFFFFF;
// Set the Data Timeout Register
AT91C_BASE_MCI->MCI_DTOR=DTOR_1MEGA_CYCLES;

// Set the Mode Register: 400KHz for MCK = 48MHz (CLKDIV = 58)
AT91C_BASE_MCI->MCI_MR= AT91C_MCI_PWSDIV|2;
//Set bus width 4 line, select slot A
AT91C_BASE_MCI->MCI_SDCR = AT91C_MCI_SCDBUS;
// Enable the MCI and the Power Saving  
AT91C_BASE_MCI->MCI_CR=AT91C_MCI_MCIEN;


}

unsigned int send_cmd(uint com,uint arg)
{
AT91C_BASE_MCI->MCI_ARGR=arg;
AT91C_BASE_MCI->MCI_CMDR=com;
while(!AT91C_BASE_MCI->MCI_SR&AT91C_MCI_CMDRDY);
return RESPONSE[0];
}

Далее посылаю команду, смотрю осциллом на клок, но тот не дергается даже. Подскажите, что я забыл включить, либо ошибки какие-то имеются.
алексей500
А интерфейс MCI в вашем контроллере это точно периферия A? И если у вас уже заработало, отпишитесь, пожалуйста.
Freeuser
Да, периферия А. MCI запустил, оказалось забыл выключить PIO:
Код
AT91C_BASE_PIOA->PIO_PDR = BIT(6)|BIT(7)|BIT(8)|BIT(9)|BIT(10)|BIT(11);

Но карту пока инициализировать не получается.
алексей500
Тут несколько человек пытались с нуля написать программу с использованием MCI. Не знаю, кажется, всё-таки не получилось. Я взял пример из IAR, называется basic-sdmmc-project. Всё нормально работает, пишет на карточку, читает. Пробовал пример для Keil, не смог запустить. Так что можно в примере из IAR'а посмотреть какие настройки они там делают. И ещё в примере полезно посмотреть, как они команды отсылают, какие биты устанавливают в MCI_CMDR.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.