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

 
 
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
aaarrr
сообщение Aug 4 2005, 08:41
Сообщение #16


Гуру
******

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



Цитата
непонятно назначение MACFIFO , что туда можно помещать и можно ли вообще?

Ничего туда помещать нельзя. Сделано, как я понял, для debugging'а всякого и загрузки.
Цитата
куда можно помещать указатели дескрипторного процессора ?
самих дескрипторов, дескрипторов статуса и буфера ?

Дык в память.
Цитата
И не понятно, зачем разделены статус и дескрипторы, какой в этом большой смысл, при чем половина инфы там продублирована.
Наворотил Cirrus по моему через чур.

Дело в том, что за основу был взят PCI Ethernet контроллер, который
Cirrus так и не выпустил. Оттуда и навороченность. Зато не так убого,
как на AT91RM9200.
Цитата
чуть не забыл, указывать ему надо на физ память или на виртуальную в случае вкл MMU ?

На физ.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Aug 5 2005, 11:36
Сообщение #17


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

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



aaarrr
вроде проинициализировал MAC по примеру драйвера BSP от Cirrus-а для WinCE.
Повесил обработчик прерывания, а прерывания не происходит.
от rtl8201bl видно что идут какие-то данные по шине, когда пакеты приходят, а от контроллера молчок.
Не подскажешь как проверить правильно ли инициализировался MAC и дескрипторный процессор ?
а лучше ткнуть носом в простой пример, а то док-ию написали как конспект который после сдачи экзамена можно выбросить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 5 2005, 13:44
Сообщение #18


Гуру
******

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



Я делал все пользуясь только мануалом, процедуры инициализации там описаны. Проверьте, проинициализированы ли регистры MaxFrmLen и *Thrshld - без них ничего работать не будет.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Aug 5 2005, 14:06
Сообщение #19


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

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



Сомневаюсь что по мануалу можно все правильно сделать, там например в процедуре инициализации не указано как инициализировать МАК адрес, и о необходимости вкл приема широковещательных пакетов. И возможно из-за невнимательности не увидел как дескрипторы инициализировать.
Вообще с налету ничего не сделаешь, а перечитывать все мозги опухнут...
ладно нашел тут драйверок от линуха, он попроще будет, буду его еще глядеть.
Хотелось на АСМе написать, а придется на Си, т.к. АСМ структуры не поддерживает.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Aug 8 2005, 10:16
Сообщение #20


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

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



aaarrr

Заметил на мой взгляд странную вещь.
Когда я пингую сеть и MAC получает пакеты, то у меня устанавливается в 1 RXMissCnt, а потом сбрасывается сам, обработчика прерывания нет, и любые обработки приема откл. Прерывание тоже выкл.
Это к чему может быть ? куда рыть ? дескрипторы или настройки ?
я думал этот счетчик должен все время расти, а не обнулятся.

кажись я понял куда рыть, он начинает вставать в 1 после прохождения 16-и пакетов, т.е. столько у меня выделено под прием.
Но странно другое, прерывания не происходят, указатели RXDCurAdd и RXStsQCurAdd не изменяются, так и должно быть ? или у меня что-то не так ?

похоже с дискипторами напутал...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:53
Рейтинг@Mail.ru


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