Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2468 и Static Memory
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
toweroff
Сильноне пинайте - только начал разбираться с ARM'ами

Итак, есть шина A[23..0], D[31..0], /WE, /OE, /CS[3..0]

Тут все понятно, 4 банка по 2^24x4 байт

А вот с сигналами BLS[3..0] непонятно. Что они делают? В даташите их вообще коннектят на /WR памяти... Помогите разобраться, а то что-то мутно как-то в документации написано с уклоном "да тут ваще все понятно и так"
aaarrr
Цитата(toweroff @ Feb 8 2009, 19:16) *
А вот с сигналами BLS[3..0] непонятно. Что они делают?

Сигналы BLS (Byte Lane Select) выбирают используемые линии шины данных при обращении к памяти. Т.е. если нужно записать байт по адресу 0x02 32-х битной шины, то BLS[3..0] будут равны 1011, а на шине адреса будет 0. Обычно предусматривается режим, в котором эти линии активизируются только в цикле записи, тогда можно собрать память с широкой шиной из отдельных 8-бит микросхем, подключив их сигналы WE к соответствующим BLS.
toweroff
Цитата(aaarrr @ Feb 8 2009, 21:44) *
Сигналы BLS (Byte Lane Select) выбирают используемые линии шины данных при обращении к памяти. Т.е. если нужно записать байт по адресу 0x02 32-х битной шины, то BLS[3..0] будут равны 1011, а на шине адреса будет 0. Обычно предусматривается режим, в котором эти линии активизируются только в цикле записи, тогда можно собрать память с широкой шиной из отдельных 8-бит микросхем, подключив их сигналы WE к соответствующим BLS.


оо как unsure.gif

итого... имея реальную шину 32 бита мне эти сигналы не нужны? и я буду использовать только общий /WR?

и еще - имея 2 банка по 32Мбайт (на 32-разрядной шине) обойдусь ли я функционалом одного LPC, или все-таки придется городить на внешней логике отдельные сигналы /CS_BANK0 и /CS_BANK1 на базе /CS[3..0] контроллера?
aaarrr
Цитата(toweroff @ Feb 8 2009, 22:28) *
итого... имея реальную шину 32 бита мне эти сигналы не нужны? и я буду использовать только общий /WR?

Нужны, естественно. Если будет использована 32-х битная память, то они должны быть заведены на соответствующие BLS/DQM.
toweroff
Цитата(aaarrr @ Feb 9 2009, 03:53) *
Нужны, естественно. Если будет использована 32-х битная память, то они должны быть заведены на соответствующие BLS/DQM.


нет там таких линий

есть несколько модулей, имеющих 32-битную структуру по данным, но адресуемым либо как 16М, 32М, 64М, при этом могут иметь одно- и двух-банковую систему. Подобных выводов нет в принципе.
По двум банкам - есть отдельные /CS0 и /CS1
Классика - A, D, /CS, /WR, /OE

В модулях возможна как 16- , так и 8-разрядная память. То есть по записи я могу каждый чип модуля конфигурить отдельно? Где можно посмотреть диаграммы? Или это все аппаратно зависит от какого-то регистра LPC?
aaarrr
Цитата(toweroff @ Feb 9 2009, 04:32) *
нет там таких линий

Что же это за модули такие? Тогда сможете работать только с полными 32-х битными словами, так как запись одного байта будет портить 3 соседних.
Methane
Цитата(toweroff @ Feb 9 2009, 03:32) *
нет там таких линий

Какие именно у вас модули? Какие на них микросхемы? Если 8 битные, то они через CS заведены.
toweroff
Ну вот такие модули smile.gif

Для организации 16М и 32М используются 8-битные микросхемы. Есть варианты как с одним банком, так и с двумя (один или два /CS)
64M модули имеют организацию 2 банка по 32М (по 2 16-битных микросхемы)

Сигналы записи раздельные (соответственно 4 и 2 /WR для 8-битных и 16-битных микросхем) - я это не использовал раньше, соединял все /WR в один

А еще есть 64М модули, в которых мало 2 банка, так еще и микросхемы имеют двухбанковую архитектуру (LO- и HI-space) с отдельными своими /CS_LO и /CS_HI

Цитата(aaarrr @ Feb 9 2009, 13:39) *
Что же это за модули такие? Тогда сможете работать только с полными 32-х битными словами, так как запись одного байта будет портить 3 соседних.


Нет, запись производится сразу 4 байт по одному адресу 32-разрядной шины
aaarrr
Цитата(toweroff @ Feb 10 2009, 02:29) *
Нет, запись производится сразу 4 байт по одному адресу 32-разрядной шины

Кем производится? Если вашей программой, которая будет держать в этой памяти только данные размером в слово - то пожалуйста, но стандартные библиотеки, например, такой подход не оценят.
toweroff
Цитата(aaarrr @ Feb 10 2009, 03:30) *
Кем производится? Если вашей программой, которая будет держать в этой памяти только данные размером в слово - то пожалуйста, но стандартные библиотеки, например, такой подход не оценят.


да, моей программой. Так что посоветуете по поводу разводки сигналов?
Methane
Цитата(toweroff @ Feb 10 2009, 11:45) *
да, моей программой. Так что посоветуете по поводу разводки сигналов?

Развести BLS на соответствующие WE соответствующих 8 битных микросхем. Там же должно быть в документации к ним разрисовано, какие сигналы в каком порядке должны сработать, чтобы произошла запись.
toweroff
Цитата(Methane @ Feb 10 2009, 13:35) *
Развести BLS на соответствующие WE соответствующих 8 битных микросхем. Там же должно быть в документации к ним разрисовано, какие сигналы в каком порядке должны сработать, чтобы произошла запись.


Возможно, я неточно задал вопрос.

Если я буду с этими модулями работать как с РЕАЛЬНОЙ 32-битной шиной, как будут вести себя сигналы управления?
/WR работает всегда?
/CS[3..0] будут работать для выборки 16М банка (0x8000 0000 - 0x80FF FFFF, 0x8100 0000 - 0x81FF FFFF, 0x8200 0000 - 0x82FF FFFF, 0x8300 0000 - 0x83FF FFFF)?
aaarrr
Цитата(toweroff @ Feb 10 2009, 14:38) *
с этими модулями

С какими модулями? Документация на них есть?
Methane
Цитата(toweroff @ Feb 10 2009, 13:38) *
Возможно, я неточно задал вопрос.

Если я буду с этими модулями работать как с РЕАЛЬНОЙ 32-битной шиной, как будут вести себя сигналы управления?
/WR работает всегда?
/CS[3..0] будут работать для выборки 16М банка (0x8000 0000 - 0x80FF FFFF, 0x8100 0000 - 0x81FF FFFF, 0x8200 0000 - 0x82FF FFFF, 0x8300 0000 - 0x83FF FFFF)?

Как сделаете так и будет. Если у вас 4 микросхемы по 8 бит, и вы хотите сделать 32битную шину, то она у вас будет по одному адрессу, CS будет 1 на всех, а BLS будет по одному на микросхему (может нужно будет AND поставить), и будет один банк памяти 0x8000 0000 и дальше.
Вы можете сделать 8 битную шину, повесив каждую микросеху на свой CS. Тогда у вас будут 4 адресных пространство на каждую микросхему.

WR всегда работает.

ВЫ же не сказали что у вас за модуль памяти, и что там стоит.
toweroff
Цитата(Methane @ Feb 10 2009, 15:00) *
Как сделаете так и будет. Если у вас 4 микросхемы по 8 бит, и вы хотите сделать 32битную шину, то она у вас будет по одному адрессу, CS будет 1 на всех, а BLS будет по одному на микросхему (может нужно будет AND поставить), и будет один банк памяти 0x8000 0000 и дальше.
Вы можете сделать 8 битную шину, повесив каждую микросеху на свой CS. Тогда у вас будут 4 адресных пространство на каждую микросхему.

WR всегда работает.

ВЫ же не сказали что у вас за модуль памяти, и что там стоит.


в том-то и дело, что модули могут быть разными и с разной внутренней организацией. В конечном устройстве для управления ими используются разные CPLD в зависимости от типа используемых микросхем.

В большинстве случаев формируется 2-банковая система. При этом модуль может иметь организацию 16М (2 банка по 8М), 32М (2 банка по 16М) и 64М (2 банка по 32М), однако может быть и однобанковая архитектура (то есть сигналы /CS0 и /CS1 конвертятся CPLD'шкой в старший адрес и один /CS)

Моя задача - обеспечить запись и проверку контрольной суммы модуля.

Также на каждом модуле есть (впаяны перемычки) некий ID, по которому можно судить о внутренней организации. Фактически, в CPLD целевого девайса и записана прошивка, которая меняет свои функции (адрес, /CS0, /CS1) в зависимости от модуля и для самого девайса внутренняя организация модуля не важна (он не пишет ничего туда, только читает)

Вообще, я тоже могу поставить некую CPLD в свой девайс, однако хочу убедиться, что в данном случае контроллер External Memory LPC не обеспечит мне аналогичный функционал
Была мысль использовать ту CPLD, которая стоит в целевом устройстве и воткнуть в свой девайс панельку под нее, но доступ к этой микросхеме в целевом девайсе достаточно затруднен и, в силу 90% кривости рук обслуживающего персонала, очень нежелателен в принципе
Methane
Цитата(toweroff @ Feb 10 2009, 14:25) *
в том-то и дело, что модули могут быть разными и с разной внутренней организацией. В конечном устройстве для управления ими используются разные CPLD в зависимости от типа используемых микросхем.

В большинстве случаев формируется 2-банковая система. При этом модуль может иметь организацию 16М (2 банка по 8М), 32М (2 банка по 16М) и 64М (2 банка по 32М), однако может быть и однобанковая архитектура (то есть сигналы /CS0 и /CS1 конвертятся CPLD'шкой в старший адрес и один /CS)

Моя задача - обеспечить запись и проверку контрольной суммы модуля.

Также на каждом модуле есть (впаяны перемычки) некий ID, по которому можно судить о внутренней организации. Фактически, в CPLD целевого девайса и записана прошивка, которая меняет свои функции (адрес, /CS0, /CS1) в зависимости от модуля и для самого девайса внутренняя организация модуля не важна (он не пишет ничего туда, только читает)

Вообще, я тоже могу поставить некую CPLD в свой девайс, однако хочу убедиться, что в данном случае контроллер External Memory LPC не обеспечит мне аналогичный функционал
Была мысль использовать ту CPLD, которая стоит в целевом устройстве и воткнуть в свой девайс панельку под нее, но доступ к этой микросхеме в целевом девайсе достаточно затруднен и, в силу 90% кривости рук обслуживающего персонала, очень нежелателен в принципе

Какой-то "поток разума". Что вы вообще делаете?

Поставте контроллер со SDRAM.
toweroff
Цитата(Methane @ Feb 10 2009, 15:39) *
Какой-то "поток разума". Что вы вообще делаете?

Поставте контроллер со SDRAM.


а нафига мне SDRAM, если мне нужны совершенно конкретные, готовые модули? laughing.gif

Решил объединить /CS0 и /CS1 по AND, то же самое /CS2 и /CS3 на каких-нибудь PicoGate, получим два банка по 32М

BLSы идут лесом, буду пользовать общий /WR
toweroff
Нашел документ lpc24xx_externalmemory.pdf, нормально все расписано, с диаграммами по тактам ожидания.

Натолкнулся тут на такую вещь. Отлаживаю в симуляторе Keil 3.4.

Делаю указатель на DWORD, указываю ему старт 0х8000 0000. Пр попытке записи в эту область получаю *** error 65: access violation at 0x80000000 : no 'write' permission
Посмотрел настройки банков - все в норме, Write Protect сброшен. Но чую, что не там собака порылась sad.gif
toweroff
Нашел в Debug->Memory Map
bigarmer
Have a look at the schematics of EA LPC2468 OEM board.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.