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

 
 
> вопрос по инициализации Cirrus EP9307
merk0
сообщение Mar 3 2009, 12:12
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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 разрядная "флеша" стоит?
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
aaarrr
сообщение Mar 3 2009, 13:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Для нормальной работы 32-бит шины нужно соответствующим образом проинициализировать SMCBCR6.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 3 2009, 13:55
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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.
спасибо за инфу!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 3 2009, 14:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(merk0 @ Mar 3 2009, 16:55) *
какой вообще контроллер в этом проце отвечает за такую схематику? почему это static memory?
поскольку я чайник, я думал что это типа SyncFlash.

MT28F128J3 - это обычная асинхронная флеш. И подключена она к SMC.
Go to the top of the page
 
+Quote Post
AlexN
сообщение Mar 3 2009, 15:08
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 101
Регистрация: 28-06-04
Пользователь №: 200



Цитата(merk0 @ Mar 3 2009, 18:12) *
Читаю при это я довольно странные данные. Тип девайса вроде верный - 18H, но тип флешки - 89H(Intel), тогда как производитель - Micron(должно быть вроде 2сH).


Насколько я помню, J3 флешь от микрона по идентам откликается (представляется) интелом. Короче, полный абсолютный аналог.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 3 2009, 15:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



У них есть оба варианта. У микросхем с микроновским ID есть буква M в названии.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 4 2009, 07:16
Сообщение #7


Участник
*

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



Огромное спасибо. Буду еще вопросы задавать. smile.gif
Go to the top of the page
 
+Quote Post
AlexN
сообщение Mar 4 2009, 11:00
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 101
Регистрация: 28-06-04
Пользователь №: 200



Цитата(merk0 @ Mar 4 2009, 13:16) *
Огромное спасибо. Буду еще вопросы задавать. smile.gif


если не секрет, на фига Вам 32бит шина на флешь? Это экзотический вариант. Стандартноо все делают 16бит. На ОЗУ - без вопросов. А вот флешь - не понятно.
Go to the top of the page
 
+Quote Post
HardJoker
сообщение Mar 4 2009, 11:03
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 995
Регистрация: 3-06-05
Пользователь №: 5 713



Цитата(AlexN @ Mar 4 2009, 14:00) *
если не секрет, на фига Вам 32бит шина на флешь? Это экзотический вариант. Стандартноо все делают 16бит. На ОЗУ - без вопросов. А вот флешь - не понятно.


Объем в два раза больше
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 4 2009, 12:59
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 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 от ответов обоих чипов- должен получиться ответ одной флешки если они совпадают конечно smile.gif, считаем уид 16 битным словом.

finfo->DeviceId[0] = (uint8)(*(lp32+1)); //читаем уид девайса, считаем его байтом.

в результате получаем уид производителя = 189H (!), уид девайса - 18H(это правильно).
пугает уид производителя, там лишня спереди единица(по мануалу д.б. 89H). В принципе если порезать его до байта - будет как нужно...
никто с таким эффектом не сталкивался?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2009, 13:10
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(merk0 @ Mar 4 2009, 15:59) *
finfo->ManufactureId = (uint16)(((*lp32 >> 16) & (*lp32)) & 0xFFFF);//читаем уид - то есть просто делаем and от ответов обоих чипов- должен получиться ответ одной флешки если они совпадают конечно smile.gif, считаем уид 16 битным словом.

Не самый надежный вариант. А если один из ответов будет 0xFFFF?

Цитата(merk0 @ Mar 4 2009, 15:59) *
в результате получаем уид производителя = 189H (!), уид девайса - 18H(это правильно).
пугает уид производителя, там лишня спереди единица(по мануалу д.б. 89H). В принципе если порезать его до байта - будет как нужно...
никто с таким эффектом не сталкивался?

Где-то сталкивался, кажется. Не обращайте внимание пока.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 4 2009, 14:07
Сообщение #12


Участник
*

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



Цитата
Не самый надежный вариант. А если один из ответов будет 0xFFFF?

имеете ввиду - правильный замаскирует неверный FFFF? Угу, согласен. Для корректности надо бы делать OR и проверять. Не обратил внимания.
Цитата
Где-то сталкивался, кажется. Не обращайте внимание пока.

ок. спасибо. совершенно нет опыта в это деле, вопросы буквально на каждом шагу.
железка кстати тоже только запускается, не тестировалась, потому возможны любые варианты поведения. smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2009, 14:11
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(merk0 @ Mar 4 2009, 17:07) *
имеете ввиду - правильный замаскирует неверный FFFF? Угу, согласен. Для корректности надо бы делать OR и проверять. Не обратил внимания.

Для корректности надо каждый отдельно сравнивать.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 4 2009, 16:54
Сообщение #14


Участник
*

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



еще тупой вопросик.
читаю вот rtc, нужно ли запрещать прерывания при чтении или установке регистров rtc?
по описанию, вроде, инкремент регистра данных делается железом и похоже не подчиняется прерываниям никак. то есть запрещай - не запрещай, в момент чтения может произойти инкремент, если конечно чтение-запись этих регистров не делается самим ARMом как атомарная операция.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2009, 17:17
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А смысл запрещать? Регистр-то один.
Go to the top of the page
 
+Quote Post

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

 


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


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