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

 
 
 
Reply to this topicStart new topic
> Как SDRAM-память работает вместе с микроконтроллером?, микроконтроллер - AT91SAM9260
h0rr0rr_drag0n
сообщение Jan 22 2012, 20:47
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 29-10-09
Пользователь №: 53 281



Дано - у меня есть отладочная плата SK-AT91SAM9260-SIM300 от стартеркита (http://starterkit.ru/html/index.php?name=s...=view&id=28).
На ней стоит микроконтроллер - AT91SAM9260. К нему подключены две микросхемы - SDRAM память от самсунга (http://www.samsung.com/global/system/busin...trial_rev11.pdf).

Успешно сломал мозг, пытаясь понять как работает эта SDRAM-память, в частности, как она взаимодействует с микроконтроллером (AT91SAM9260) и как с ней работать программно. Ниже, много странных вопросов...

0) Где бы почитать про особенности организации работы SDRAM с CPU/МК? Где описано, как все эти номера строк и столбцов преобразовываются в обычные адреса, что происходит когда приложение хочет записать/прочитать что-то по какому-то адресу в SDRAM и так далее...?

1) Где узнать размер слова, которым память обменивается с микроконтроллером? Размер слова должен совпадать с разрядностью шины данных? Или же размер слова может произвольно варьироваться? Если да, то как его вычислить?

2) Количество строк и столбцов всегда жестко задается в даташите или же эти величины можно варьировать?

3) В документации на мою отладочную плату написано, что на ней установлено 64 Мб памяти. На самом деле там стоят 2 микросхемы по 256 мегабайт каждая. Они имеют 16-битную шину данных, но подключены к микроконтроллеру через 32-битную шину - D[0:15] к шине данных одной микросхемы и D[16:31] к шине данных второй. Таким образом, как я понял, младшие 16-бит слова физически лежат в одной микросхеме, а старшие в другой. Итак, я имею 256 Мб памяти на плате.
Еще, в документации написано, что память 4-х банковая, откуда я и получаю 64 мегабайта памяти. Но мне непонятно, откуда взялось это деление на банки и почему я не могу использовать сразу все 256 мегабайт??

4) Я правильно понимаю, что судя по описанию адресного пространства для AT91SAM9260 я могу обращаться к SDRAM, начиная с адреса 0x2 000 0000 и заканчивая адресом 0x2400 0000 (для 64Мб = 0x4000 000)? А трансляцией из подобных "обычных" адресов в номера строк и колонок занимается контроллер-SDRAM?


5) Есть ли какие-то особые требования к размещению исполняемого кода в SDRAM? Например, должен ли он располагаться в в начале строки, банка? Поясняю причину вопроса - у меня есть самосборное ядро линукса, несжатое. Заметил, что если его разместить в SDRAM по адресу 0x2040 0000, то оно грузится, если же по адресу 0x2000 8000, то оно не грузится. Какая может быть разница между этими двумя адресами для ядра? Ему не все ли равно, главное лишь бы места хватало и ничего не перекрывалось?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 22 2012, 21:08
Сообщение #2


Гуру
******

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



Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
0) Где бы почитать про особенности организации работы SDRAM с CPU/МК? Где описано, как все эти номера строк и столбцов преобразовываются в обычные адреса, что происходит когда приложение хочет записать/прочитать что-то по какому-то адресу в SDRAM и так далее...?

Соответствие физических адресов адресам вида банк-строка-столбец приведены в даташите на МК (см. 22. SDRAM Controller (SDRAMC)).

Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
1) Где узнать размер слова, которым память обменивается с микроконтроллером? Размер слова должен совпадать с разрядностью шины данных? Или же размер слова может произвольно варьироваться? Если да, то как его вычислить?

Размер слова может быть равен разрядности шины или же быть меньше её.

Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
2) Количество строк и столбцов всегда жестко задается в даташите или же эти величины можно варьировать?

Со стороны памяти жестко заданы. Со стороны контроллера можно варьировать, это нужно, чтобы иметь возможность работать с различными типами памяти.

Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
3) В документации на мою отладочную плату написано, что на ней установлено 64 Мб памяти. На самом деле там стоят 2 микросхемы по 256 мегабайт каждая...

256 мегабит, а не мегабайт. Всего 256*2/8=64 мегабайта.

Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
4) Я правильно понимаю, что судя по описанию адресного пространства для AT91SAM9260 я могу обращаться к SDRAM, начиная с адреса 0x2 000 0000 и заканчивая адресом 0x2400 0000 (для 64Мб = 0x4000 000)? А трансляцией из подобных "обычных" адресов в номера строк и колонок занимается контроллер-SDRAM?

Правильно.

Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
5) Есть ли какие-то особые требования к размещению исполняемого кода в SDRAM? Например, должен ли он располагаться в в начале строки, банка? Поясняю причину вопроса - у меня есть самосборное ядро линукса, несжатое. Заметил, что если его разместить в SDRAM по адресу 0x2040 0000, то оно грузится, если же по адресу 0x2000 8000, то оно не грузится. Какая может быть разница между этими двумя адресами для ядра? Ему не все ли равно, главное лишь бы места хватало и ничего не перекрывалось?

Никаких требований нет.
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Jan 22 2012, 21:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
Дано - у меня есть отладочная плата ...

0)Про SDRAM - на википедии и в книжках про основы электроники, цифровой смехотехники.
про номера столбцов и банки вообще можно не парится - их нужно указать лишь при инициализации контроллера памяти
используются прямые адреса, а контроллер сам их разложит на столбцы и банки
1)ARM - 32разрядный МП
2)жёстко
3)МБ - мегабайт, Мб - мегабит
две микросхемы по 256 мегабит образуют суммарно 512мегабит или 64мегабайта
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jan 22 2012, 23:07
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Можете еще посмотреть Atmel'овский апп-ноут под название "Using SDRAM on AT91SAM9 Microcontrollers", скачать можно по ссылке
Go to the top of the page
 
+Quote Post
sparcmaster
сообщение Jan 23 2012, 04:20
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333



Цитата(h0rr0rr_drag0n @ Jan 23 2012, 00:47) *
4) Я правильно понимаю, что судя по описанию адресного пространства для AT91SAM9260 я могу обращаться к SDRAM, начиная с адреса 0x2 000 0000 и заканчивая адресом 0x2400 0000 (для 64Мб = 0x4000 000)?

Только правильно 0x2 000 0000 - 0x23FFFFFF.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jan 23 2012, 08:27
Сообщение #6


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(h0rr0rr_drag0n @ Jan 22 2012, 23:47) *
5) Есть ли какие-то особые требования к размещению исполняемого кода в SDRAM? Например, должен ли он располагаться в в начале строки, банка? Поясняю причину вопроса - у меня есть самосборное ядро линукса, несжатое. Заметил, что если его разместить в SDRAM по адресу 0x2040 0000, то оно грузится, если же по адресу 0x2000 8000, то оно не грузится. Какая может быть разница между этими двумя адресами для ядра? Ему не все ли равно, главное лишь бы места хватало и ничего не перекрывалось?


Варианта на мой взгляд два:
1. Загружаемый вами код с адреса 0x2000 8000 затирает собой часть загрузчика.
2. В загрузчике жёстко прописано грузить линукс с адреса 0x2040 0000 - надо перекомпилить загрузчик.
Go to the top of the page
 
+Quote Post
h0rr0rr_drag0n
сообщение Jan 23 2012, 13:21
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 29-10-09
Пользователь №: 53 281



Что ж, теперь мне стала понятна "магия" работы MCU с SDRAM и мозг больше не взрывается. Всем спасибо за ответы!
Go to the top of the page
 
+Quote Post

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

 


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


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