|
вопрос по инициализации Cirrus EP9307 |
|
|
|
Mar 3 2009, 12:12
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 5-05-05
Пользователь №: 4 763

|
Нужна помощь по инициализации этого процессора. Я не очень знаком с архитектурой ARM, но есть задача, в которой к данному процу подключены две флешки (Intel J3), для организации 32 разрядной флеш-памяти. У меня есть исходники инициализации от платы EDB9315, но там стоит одна 16-рязрядная флешка. в исходниках есть код для чтения 32 разрядной флешки(это определяется по 7 биту в регистре SysCfg 0x8093009C) куда бит ставится кодом начального загрузчика(он там проверяет куда память подключена, и обнаружив ее, в 32 режиме, ставит этот бит). функция чтения флешки(ее кода производителя и типа девайса), проверяет этот бит и работает с флешкой либо 32 рязрядныи способом, либо 16-ти. Читаю при это я довольно странные данные. Тип девайса вроде верный - 18H, но тип флешки - 89H(Intel), тогда как производитель - Micron(должно быть вроде 2сH). Также похоже есть проблема с реальной шириной шины для этой пары флешек. Она похоже 16 разрядная(есть предположение). Вопрос тут такой. Нужно ли каким-то образом задавать при инициализации проца ширину шины для флешки(она сидит на CS6), или она (как видно по коду, что я имею) просто определяется по, фактически, ширине шины SDRAM???(чип селект 0). Сразу предупреждаю, что схему разрабатывал не я, я не электронщик, а скорее программист. и память и флешка по базовому адресу 0x60000000 отмаплены на их-же физ адреса, насколько я понимаю этот арм.
Короче - кто знает как правильно к EP9307 прикрутить 2 флешки, получить 32 битную флешку таким образом и что нужно делать при инициализации если такай 32 разрядная "флеша" стоит?
|
|
|
|
|
 |
Ответов
(1 - 14)
|
Mar 3 2009, 13:55
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 5-05-05
Пользователь №: 4 763

|
Цитата(aaarrr @ Mar 3 2009, 16:19)  Для нормальной работы 32-бит шины нужно соответствующим образом проинициализировать SMCBCR6. гм...как это я пропустил этот пункт в гайде...StaticMemory Controller. а я все читал следующий в гайде контроллер - SDRAM, SyncROM, SyncFLASH controller. вопрос чайника - на схеме устройства две флешки MT28F128J3 просто прилеплены адресами на адресную шину проца, а данные с них идут на шину данных проца: одна флешка - первая половина 32-рязр слова, другая - вторая половина 32-разр слова... и заведен на них чипселект 6. какой вообще контроллер в этом проце отвечает за такую схематику? почему это static memory? поскольку я чайник, я думал что это типа SyncFlash. спасибо за инфу!
|
|
|
|
|
Mar 4 2009, 12:59
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 5-05-05
Пользователь №: 4 763

|
скорее всего они поставили и впрямь для увеличения размера флешки. вы вот лучше скажите, я читаю в данной 32-битной конфигурации уид производителя и девайса, таким вот образом(код заимствованный, я его пока просто причесывал в неотвественных местах, комменты мои) *lp32 = (CMD_READ_ID_CODES<<16) | CMD_READ_ID_CODES; // на обе половины 32-шины данных выставляем команду чтения уида, то есть команда идет в оба чипа. lp32 - указатель на базовый адрес флешки на 32битное слово. finfo->ManufactureId = (uint16)(((*lp32 >> 16) & (*lp32)) & 0xFFFF);//читаем уид - то есть просто делаем and от ответов обоих чипов- должен получиться ответ одной флешки если они совпадают конечно  , считаем уид 16 битным словом. finfo->DeviceId[0] = (uint8)(*(lp32+1)); //читаем уид девайса, считаем его байтом. в результате получаем уид производителя = 189H (!), уид девайса - 18H(это правильно). пугает уид производителя, там лишня спереди единица(по мануалу д.б. 89H). В принципе если порезать его до байта - будет как нужно... никто с таким эффектом не сталкивался?
|
|
|
|
|
Mar 4 2009, 13:10
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(merk0 @ Mar 4 2009, 15:59)  finfo->ManufactureId = (uint16)(((*lp32 >> 16) & (*lp32)) & 0xFFFF);//читаем уид - то есть просто делаем and от ответов обоих чипов- должен получиться ответ одной флешки если они совпадают конечно  , считаем уид 16 битным словом. Не самый надежный вариант. А если один из ответов будет 0xFFFF? Цитата(merk0 @ Mar 4 2009, 15:59)  в результате получаем уид производителя = 189H (!), уид девайса - 18H(это правильно). пугает уид производителя, там лишня спереди единица(по мануалу д.б. 89H). В принципе если порезать его до байта - будет как нужно... никто с таким эффектом не сталкивался? Где-то сталкивался, кажется. Не обращайте внимание пока.
|
|
|
|
|
Mar 4 2009, 14:07
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 5-05-05
Пользователь №: 4 763

|
Цитата Не самый надежный вариант. А если один из ответов будет 0xFFFF? имеете ввиду - правильный замаскирует неверный FFFF? Угу, согласен. Для корректности надо бы делать OR и проверять. Не обратил внимания. Цитата Где-то сталкивался, кажется. Не обращайте внимание пока. ок. спасибо. совершенно нет опыта в это деле, вопросы буквально на каждом шагу. железка кстати тоже только запускается, не тестировалась, потому возможны любые варианты поведения.
|
|
|
|
|
Mar 4 2009, 16:54
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 5-05-05
Пользователь №: 4 763

|
еще тупой вопросик. читаю вот rtc, нужно ли запрещать прерывания при чтении или установке регистров rtc? по описанию, вроде, инкремент регистра данных делается железом и похоже не подчиняется прерываниям никак. то есть запрещай - не запрещай, в момент чтения может произойти инкремент, если конечно чтение-запись этих регистров не делается самим ARMом как атомарная операция.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|