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

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> Несколько вопросов, EP9301, SDRAM, MMU, WinCE
Desenix
сообщение Jul 11 2005, 12:24
Сообщение #1


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



1)SDRAM 256Мбит в EP9301
в DS сказано что после инициализации общая память в 32Мбайта разбросана кусками по сегменту в 256Мбайт следующим образом
0xN000_0000 - 0xN03F_FFFF
0xN100_0000 - 0xN13F_FFFF
0xN400_0000 - 0xN43F_FFFF
0xN500_0000 - 0xN53F_FFFF
0xN800_0000 - 0xN83F_FFFF
0xN900_0000 - 0xN93F_FFFF
0xNC00_0000 - 0xNC3F_FFFF
0xND00_0000 - 0xND3F_FFFF
где N - сегмент C,D,E,F(0)

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

2) Нужно ли инициализировать MMU, если да, то как (там разные типы таблиц) если я хочу потом запускать WinCE, при чем образ будет находится в RAM. Не будет ли конфликта ?

3) по MMU не совсем понятно, на EP9301 кастрированная дока, поэтому смотрю на аналогичное ядро, как я понял, необходимо создать таблицу из 4096 записей (по 4 байта/1слову каждая), где каждая запись описывает 1Мбайт виртуальной памяти, т.е. запись 0 - первый Мбайт, запись 1- второй итд...
Вот только просмотрев процедуры инициализации на два разных камня, я не нашел толком как там этот MMU инициализируют, в одном случае передают указатель на таблицу из записей
Код
   EXPORT      OEMAddressTable[DATA]

OEMAddressTable
      ;
      ; TODO - This needs to be changed.
      ;
      ;;;-------------------------------------------------------------
      ;;; Virt Addr   Phys Addr   MB
      ;;;-------------------------------------------------------------

       DCD 0x80000000, 0xF0000000, 64 ; 64 MB DRAM
       DCD 0x88000000, 0x00000000, 32 ; 32 Mb of Intel J3 flash
       DCD 0x8A000000, 0x10000000, 16 ; 16 Mb of AMD flash
       DCD 0x8B000000, 0x60000000, 1  ; 512K of battery backed SRAM.
       DCD 0x90000000, 0x80000000, 16 ; 16 MB of System ASIC regs etc.
       DCD 0x91000000, 0x40000000, 192; 192 Meg of PCMCIA space
       DCD 0x00000000, 0x00000000, 0  ; End of Table (MB MUST BE ZERO!)
       END

а в другом вообще ручками инициализируют
Код
void AT91F_InitMMU(unsigned int *pTranslationTable)
{
int i;
// Program the TTB
AT91F_ARM_WriteTTB((unsigned int) pTranslationTable);
// Program the domain access register
AT91F_ARM_WriteDomain(0xC0000000); // domain 15: access are not checked

// Reset table entries
for (i = 0; i < 4096; ++i)
 pTranslationTable[i] = 0;
// Program level 1 page table entry
pTranslationTable[0x0] =
 (0x0 << 20) |  // Physical Address
 (1 << 10) |      // Access in supervisor mode
 (15 << 5) |      // Domain
 1 << 4 |
 0x2;             // Set as 1 Mbyte section
pTranslationTable[0x100] =
 (0x200 << 20) |  // Physical Address
 (1 << 10) |      // Access in supervisor mode
 (15 << 5) |      // Domain
 1 << 4 |
 (1 << 3) |       // Cachable
 0x2;             // Set as 1 Mbyte section
pTranslationTable[0x200] =
 (0x200 << 20) |  // Physical Address
 (1 << 10) |      // Access in supervisor mode
 (15 << 5) |      // Domain
 1 << 4 |
 0x2;             // Set as 1 Mbyte section
pTranslationTable[0xFFF] =
 (0xFFF << 20) |  // Physical Address
 (1 << 10) |      // Access in supervisor mode
 (15 << 5) |      // Domain
 1 << 4 |
 0x2;             // Set as 1 Mbyte section

// Enable the MMU
AT91F_EnableMMU();
}

при чем зачем-то кусками и всего 4Мбайта.

пока читаю дальше, но четкой логики в документации по MMU не вижу.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 11 2005, 12:53
Сообщение #2


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



Забыл спросить, саму таблицу дескрипторов можно в любом месте SDRAM распологать ?
редактировать ее потом можно будет только по виртуальному адресу ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 11 2005, 17:11
Сообщение #3


Гуру
******

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



1. Для 16 бит шины, похоже, действительно так. Вообще, советую читать одновременно три даташита: ep9301, ep9312 и ep9315 - сильно выручает.
2-3. По поводу WinCE ничего не скажу, не работал. Подробное описание работы с MMU можно найти в ARM920 TRM на сайте ARM.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 11 2005, 20:08
Сообщение #4


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



Цитата(aaarrr @ Jul 11 2005, 21:11)
1. Для 16 бит шины, похоже, действительно так. Вообще, советую читать одновременно три даташита: ep9301, ep9312 и ep9315 - сильно выручает.
2-3. По поводу WinCE ничего не скажу, не работал. Подробное описание работы с MMU можно найти в ARM920 TRM на сайте ARM.
*


1) криво как-то сделали, ну да ладно...

с MMU разобраюсь, с битами кэширования в дескрипторах не совсем все ясно, нет описания их назначения.
Доку взял с атмеловского АРМа AT91RM9200
надо было его сразу за основу взять, там и срам есть, но начальство как всегда ищет где подешевле, а он тогда был немного дороже цируса.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 11 2005, 20:43
Сообщение #5


Гуру
******

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



Описание битов кеширования есть на стр.93 ARM920T_TRM:
C B
00 - Noncached, nonbuffered;
01 - Noncached, buffered;
10 - Cached write-through mode;
11 - Cached write-back mode;
А EP9301 кое-чем и круче AT91RM9200, ethernet-ом, например.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 12 2005, 12:56
Сообщение #6


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



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

MMU вроде заработал, по крайней мере когда я криво заполнял или размещал дескрипторы, у меня все зависало.

Вот еще не могу найти расположение битов в регистрах MMU
кое что по тексту и по примерам нарыл

например в Control Register есть биты управления M,A,S,R - а их позиции почему-то не указаны.

Извиняюсь, все нашел в разделе Programmer's Model ....920T_TRM.pdf

Сообщение отредактировал Desenix - Jul 12 2005, 13:08
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 28 2005, 17:45
Сообщение #7


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



aaarrr
У тебя были проблемы если при инициализации SDRAM, mode register "писать" только в один банк из четырех, находящихся в МС ?
Сегодня в ERRATA прочел что надо все инициализировать, а попадалось мнение что достаточно только нулевой.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 29 2005, 11:08
Сообщение #8


Гуру
******

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



Нет, такой проблемы не было, но у меня в errat'е на EP9312 rev D1 и глюк
такой не описан. А какого рода проблемы наблюдаются?
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 29 2005, 12:11
Сообщение #9


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



Если стек находится в SDRAM то программа зависает при вызове sub_123
причем sub_1234 выполняется, т.е. символ на UART выводится.
Если же стек находится в SRAM Ethernet-а то все ОК.
Хотя сама программа выполняется из SDRAM. Ее загрузку контролирую, т.е. сначала записываю, потом полностью считываю что записалось и только если все ОК передаю управление.
Прочитал в Errata что надо все 4 банка инициализировать, проинициализирова и бодбанки и основные банки одинаково, результат тот же, висим.
Хотя стек может находится даже в том же подбанке что и код, ничего не меняется.
Шина ~35МГц
CPU ~20МГц

почему глючит понять не могу.

Код
sub_123:
      MOV     R12, SP
       STMFD   SP!, {R0}
       STMFD   SP!, {R12,LR}
       LDRB    R0, [SP,#8]
       BL      sub_1234
       LDMFD   SP, {SP,LR}
       BX      LR
;==========================
sub_1234
       MOV     R12, SP
       STMFD   SP!, {R0}
       STMFD   SP!, {R12,LR}
loc_028D9B4                          ; CODE XREF: sub_8028D9A8+20j
       LDR     R0, =0x808C0018
       LDR     R1, [R0]
       AND     R2, R1, #0x80
       CMP     R2, #0x80
       BEQ     loc_028D9CC
       B       loc_028D9B4
loc_028D9CC                          ; CODE XREF: sub_8028D9A8+1Cj
       LDRB    R1, [SP,#8]
       MOV     R2, #0x80000000
       ORR     R0, R2, #0x8C0000
       STR     R1, [R0]
       LDMFD   SP, {SP,LR}
       BX      LR


Еще чуть не забыл, если второй вызов замаскировать, т.е. вложенную процедуру не вызывать, то зависания не происходит.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 29 2005, 12:51
Сообщение #10


Гуру
******

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



А суровый тест SDRAM памяти пробовали? Лучше всего заполнение псевдослучайной последовательностью, а потом считывание и проверка.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 29 2005, 12:58
Сообщение #11


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



Цитата(aaarrr @ Jul 29 2005, 16:51)
А суровый тест SDRAM памяти пробовали? Лучше всего заполнение псевдослучайной последовательностью, а потом считывание и проверка.
*


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

Да и что мне этот тест даст ? убедиться лишний раз что SDRAM глючит.

Пробовал 2метра писать и потом все полностью читать, по UART, все было ОК.
Это был код.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 29 2005, 17:37
Сообщение #12


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



Еще раз посмотрел инициализацию SDRAM от Cirrus Logic
и обнаружил одну любопытную деталь
В контроллере инициализируют CasLat = 3
а в mode register MC SDRAM CasLat = 2

Может я невнимательно читал док-ю, но у меня эти значения равны.

===================

проверил сегодня с разными значениями, вообще не работает.
что самое интересное, глю очень стабилен.
пробовал сегодня по несколько слов в стек опускать / поднимать, выходило что у некоторых последовательность путается. подробнее было лень исследовать, отложил.

PS: что то Cirrus я начинаю ненавидеть ... глюк на глюке у камня.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 31 2005, 08:11
Сообщение #13


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



черт бы побрал этих разработчиков из цируса...
заработал SDRAM при следующих параметрах

Контроллер:
CasLat = 2
RasCas = 3
BrsLng = 4

SDRAM: ModeReg
CasLat = 2
BrsLng = 8 !

При параметре CasLat = 3 глючит!
Вообщем попади в десятку, закрытыми глазами.
В док-ии про эти извращения ни слова не нашел, а в примере тоже не работало. Возможно это из-за особенностей платы или частот ХЗ, изучать лень.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 31 2005, 22:33
Сообщение #14


Гуру
******

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



Странно, правда у Цирроза много моментов, никак не учтенных в документации. Но жестокий тест все равно очень рекомендую...
Go to the top of the page
 
+Quote Post
Desenix
сообщение Aug 4 2005, 07:09
Сообщение #15


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

Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141



я сделал проще, запихиваю в стек 8 регистров одной командой, потом забираю, и если они восстановились правильно, то считаю что память правильно инициализировалась и процедура инициализации возвращает ОК.

Тут вопросик возник, в связи с тем что пишу свой бутлоадер по Ethernet:
непонятно назначение MACFIFO , что туда можно помещать и можно ли вообще?
куда можно помещать указатели дескрипторного процессора ?
самих дескрипторов, дескрипторов статуса и буфера ?
И не понятно, зачем разделены статус и дескрипторы, какой в этом большой смысл, при чем половина инфы там продублирована.
Наворотил Cirrus по моему через чур.

чуть не забыл, указывать ему надо на физ память или на виртуальную в случае вкл MMU ?
Go to the top of the page
 
+Quote Post

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

 


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


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