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

 
 
 
Reply to this topicStart new topic
> ARM9: запуск MCI контроллера
Freeuser
сообщение Jun 17 2010, 09:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



Доброе время суток. Пытаюсь запустить 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];
}

Далее посылаю команду, смотрю осциллом на клок, но тот не дергается даже. Подскажите, что я забыл включить, либо ошибки какие-то имеются.
Go to the top of the page
 
+Quote Post
алексей500
сообщение Jun 19 2010, 19:01
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 22-05-10
Пользователь №: 57 445



А интерфейс MCI в вашем контроллере это точно периферия A? И если у вас уже заработало, отпишитесь, пожалуйста.
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Jun 21 2010, 07:28
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



Да, периферия А. MCI запустил, оказалось забыл выключить PIO:
Код
AT91C_BASE_PIOA->PIO_PDR = BIT(6)|BIT(7)|BIT(8)|BIT(9)|BIT(10)|BIT(11);

Но карту пока инициализировать не получается.
Go to the top of the page
 
+Quote Post
алексей500
сообщение Jun 21 2010, 16:11
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 22-05-10
Пользователь №: 57 445



Тут несколько человек пытались с нуля написать программу с использованием MCI. Не знаю, кажется, всё-таки не получилось. Я взял пример из IAR, называется basic-sdmmc-project. Всё нормально работает, пишет на карточку, читает. Пробовал пример для Keil, не смог запустить. Так что можно в примере из IAR'а посмотреть какие настройки они там делают. И ещё в примере полезно посмотреть, как они команды отсылают, какие биты устанавливают в MCI_CMDR.
Go to the top of the page
 
+Quote Post

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

 


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


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