Перейти к содержанию
    

Desenix

Участник
  • Постов

    110
  • Зарегистрирован

  • Посещение

Весь контент Desenix


  1. Не секрет, фирма техно http://www.techno.ru/txt/6/Pr_carm.htm если будете брать той же серии что и я, то 9301 не берите, глюкавый по железу(обвязка). другие я не пробовал.
  2. Если открыть EP9301_User_Guide.pdf на стр.323, то там можно увидеть таблицу 256 Mbit (16-bit wide device) 13 x 9 x 4 banks 32 MBytes 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 4 Mbytes когда я ей следовал, у меня возникали ошибки с памятью. На самом деле должно быть так 256 Mbit (16-bit wide device) 13 x 9 x 4 banks 32 MBytes 0xN000_0000 - 0xN07F_FFFF 0xN100_0000 - 0xN17F_FFFF 0xN400_0000 - 0xN47F_FFFF 0xN500_0000 - 0xN57F_FFFF 8 Mbytes Черт бы побрал документаоров фирмы Cirrus Logic
  3. А вот дескрипторы статуса после приема 16-и пакетов F0402F00 8000003C F0402F00 8001003C F0402F00 8002003C F0402F00 8003003C F0402F00 8004003C F0402F00 8005003C F0402F00 8006003C F0402F00 8007003C F0402F00 8008003C F0402F00 8009003C F0402F00 800A003C F0402F00 800B003C F0402F00 800C003C F0402F00 800D003C F0402F00 800E003C F0402F00 800F003C при этом дескрипторы данных не изменены. ща поглядел и пакет в буфере правильно принятый лежит, только длина, вместо 42, 64. мля глючный MAC у цируса нах...
  4. Глючит дескрипторный процессор MAC EP9301 передаю ему 16 дескрипторов и статусов: D3E1000 5F0 D3E1600 105F0 D3E1C00 205F0 D3E2200 305F0 D3E2800 405F0 D3E2E00 505F0 D3E3400 605F0 D3E3A00 705F0 D3E4000 805F0 D3E4600 905F0 D3E4C00 A05F0 D3E5200 B05F0 D3E5800 C05F0 D3E5E00 D05F0 D3E6400 E05F0 D3E6A00 F05F0 инициализация проходит без ошибок, за исключением одной детали, дескрипторный процессор, на мой взгляд, становится в раскорячку. регистр RXDCurAdd = D3E0044 при RXDQBAdd = D3E0000 , т.е. попадает на середину 5го дескриптора содержимое RXDEnq = 70010 RXStsEnq = 100010 а если читать статус последнего принятого пакета, то он равен 3C8000 хотя сигнал RXERR от PHY в единицу не встает. при приеме пакетов RXStsQCurAdd увеличивается на 8 при каждом принятом пакете, пока не закончатся переданные ему дескрипторы, путем записи соотв. числа в регистр RXStsEnq . А регистр RXDCurAdd в состоянии раскорячки растет пока не достигнет последнего дескриптора, а затем переходит в состояние == RXDQBAdd и больше не изменяется. Ежели передать только 8 дескрипторов, то он же застывает в состоянии D3E0040 и не изменяется. Вообщем я пока не понимаю в чем глюк.
  5. aaarrr Заметил на мой взгляд странную вещь. Когда я пингую сеть и MAC получает пакеты, то у меня устанавливается в 1 RXMissCnt, а потом сбрасывается сам, обработчика прерывания нет, и любые обработки приема откл. Прерывание тоже выкл. Это к чему может быть ? куда рыть ? дескрипторы или настройки ? я думал этот счетчик должен все время расти, а не обнулятся. кажись я понял куда рыть, он начинает вставать в 1 после прохождения 16-и пакетов, т.е. столько у меня выделено под прием. Но странно другое, прерывания не происходят, указатели RXDCurAdd и RXStsQCurAdd не изменяются, так и должно быть ? или у меня что-то не так ? похоже с дискипторами напутал...
  6. Сомневаюсь что по мануалу можно все правильно сделать, там например в процедуре инициализации не указано как инициализировать МАК адрес, и о необходимости вкл приема широковещательных пакетов. И возможно из-за невнимательности не увидел как дескрипторы инициализировать. Вообще с налету ничего не сделаешь, а перечитывать все мозги опухнут... ладно нашел тут драйверок от линуха, он попроще будет, буду его еще глядеть. Хотелось на АСМе написать, а придется на Си, т.к. АСМ структуры не поддерживает.
  7. aaarrr вроде проинициализировал MAC по примеру драйвера BSP от Cirrus-а для WinCE. Повесил обработчик прерывания, а прерывания не происходит. от rtl8201bl видно что идут какие-то данные по шине, когда пакеты приходят, а от контроллера молчок. Не подскажешь как проверить правильно ли инициализировался MAC и дескрипторный процессор ? а лучше ткнуть носом в простой пример, а то док-ию написали как конспект который после сдачи экзамена можно выбросить.
  8. я сделал проще, запихиваю в стек 8 регистров одной командой, потом забираю, и если они восстановились правильно, то считаю что память правильно инициализировалась и процедура инициализации возвращает ОК. Тут вопросик возник, в связи с тем что пишу свой бутлоадер по Ethernet: непонятно назначение MACFIFO , что туда можно помещать и можно ли вообще? куда можно помещать указатели дескрипторного процессора ? самих дескрипторов, дескрипторов статуса и буфера ? И не понятно, зачем разделены статус и дескрипторы, какой в этом большой смысл, при чем половина инфы там продублирована. Наворотил Cirrus по моему через чур. чуть не забыл, указывать ему надо на физ память или на виртуальную в случае вкл MMU ?
  9. Из-за этого кварца у меня не запускался нормально процессор, в Errata советуют собирать внешний генератор. Мне удалось запустить подбором обвязывающих конденсаторов. pin 137 = 18пФ pin 138 = 18+30пФ (подбирается)
  10. черт бы побрал этих разработчиков из цируса... заработал SDRAM при следующих параметрах Контроллер: CasLat = 2 RasCas = 3 BrsLng = 4 SDRAM: ModeReg CasLat = 2 BrsLng = 8 ! При параметре CasLat = 3 глючит! Вообщем попади в десятку, закрытыми глазами. В док-ии про эти извращения ни слова не нашел, а в примере тоже не работало. Возможно это из-за особенностей платы или частот ХЗ, изучать лень.
  11. Еще раз посмотрел инициализацию SDRAM от Cirrus Logic и обнаружил одну любопытную деталь В контроллере инициализируют CasLat = 3 а в mode register MC SDRAM CasLat = 2 Может я невнимательно читал док-ю, но у меня эти значения равны. =================== проверил сегодня с разными значениями, вообще не работает. что самое интересное, глю очень стабилен. пробовал сегодня по несколько слов в стек опускать / поднимать, выходило что у некоторых последовательность путается. подробнее было лень исследовать, отложил. PS: что то Cirrus я начинаю ненавидеть ... глюк на глюке у камня.
  12. нет не пробовал, т.к. полином лень на асме писать. хотя грузил программы на Си в IAR скомпилированные, они работали. Там правда вложенных вызовов не было. Да и что мне этот тест даст ? убедиться лишний раз что SDRAM глючит. Пробовал 2метра писать и потом все полностью читать, по UART, все было ОК. Это был код.
  13. Если стек находится в 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 Еще чуть не забыл, если второй вызов замаскировать, т.е. вложенную процедуру не вызывать, то зависания не происходит.
  14. aaarrr У тебя были проблемы если при инициализации SDRAM, mode register "писать" только в один банк из четырех, находящихся в МС ? Сегодня в ERRATA прочел что надо все инициализировать, а попадалось мнение что достаточно только нулевой.
  15. EP9301 глюки SDRAM ?

    заметил странный глюк, если код выполняется в SDRAM то при попытках вкл выкл MMU или настроить частоты PLL и др системные функции камня, происходит зависание, вплоть до полного откл. шины. При чем когда тот же код выполняется в памяти буфера Ethetnet все ОК. Может надо с частотой шины поиграться ? вроде стоит около 35Мгц, хотя и на 14.7... было то же самое. Еще заметил, иногда после ресета проц начинает греться и не начинает работать. Мож его на помойку выкинуть ? плата двухслойка. подтяжек по шине нет, на клоках стоят резюки 22-25 Ом, на селектах подтяжки к Vcc 10K схема содрана со стандартной.
  16. aaarrr Спасибо, считал что эти биты должны быть описаны в разделе MMU а не кэширования. _________________________ MMU вроде заработал, по крайней мере когда я криво заполнял или размещал дескрипторы, у меня все зависало. Вот еще не могу найти расположение битов в регистрах MMU кое что по тексту и по примерам нарыл например в Control Register есть биты управления M,A,S,R - а их позиции почему-то не указаны. Извиняюсь, все нашел в разделе Programmer's Model ....920T_TRM.pdf
  17. 1) криво как-то сделали, ну да ладно... с MMU разобраюсь, с битами кэширования в дескрипторах не совсем все ясно, нет описания их назначения. Доку взял с атмеловского АРМа AT91RM9200 надо было его сразу за основу взять, там и срам есть, но начальство как всегда ищет где подешевле, а он тогда был немного дороже цируса.
  18. завтра полистаю, я пока проще поступи, выход кварца основного проца замкнул через резистор на вход кварца часового, вроде запускается :)
  19. Забыл спросить, саму таблицу дескрипторов можно в любом месте SDRAM распологать ? редактировать ее потом можно будет только по виртуальному адресу ?
  20. Несколько вопросов

    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 не вижу.
  21. Проверил сейчас по сигнатуре: ldr r0, =0x80014000 ldr r4, [r0, #0] bl SendWord в терминалке не получил сигнатуры, зато получил участок кода, видимо в этом камешке сигнатура bootloader-ом не копируется вместе с кодом. Кстати, у меня тут проблемка с запуском проца, пока пальцем не ткнешь в резонатор 32768, не запускается, хотя схема обвязки взята со стандартной платы. Да и при чем тут этот кварц, мне не понятно.
  22. мне как-то в голову не приходило туда писать байты и полуслова, разве что указтель стека туда перенес, так ведь там все 32 битное.
  23. Странно, у меня большая часть кода выполняется в режиме thumb(16бит) с двухбайтовым выравниванием. И ведь не глючит. Иначе бы заметил. Может быть EP9301 отличается ? ведь у него нет 32б. внешней шины данных. На счет сигнатуры, я думал что загрузчик ее "вырезает", ладно в понедельник проверю, а то я компилю без нее, потом ее дописываю конвертором HEX->BIN
  24. НАШЕЛ ГЛЮК Сравнил бинарники, тот что в AT25F1024 и на диске, НЕ РАВНО. оказалось загрузчик который грузит код в EEPROM по UART глючит, это он мне битики вырезал. там загрузка в две стадии происходит, сначала PC передает передает код своего загрузчика ROM бутлоадеру, потом уже своему загрузчику код который надо прошить в параллельную Flash или последовательную EEPROM (выбирается опционально). А потом переключением перемычек можно грузиться с SPI. Буду теперь программатором шить, хотя это не удобно.
  25. 1) программа загружается бутлоадером встроенным в процессор в область буфера Ethernet находящуюся в кристалле CPU с адреса 80014000-80014800 2) Вывод UART, взят готовый исходник, добавлена инициализация, выводу я верю, т.к. если ручками добавлять старший бит после загрузки, то контроллер SDRAM который я инициализирую, начинает реагировать, т.е. меняется его настройка, видно осциллографом. Если надо могу исходинк сюда притащить. 3) какие именно значения я вроде указал, байтики вывожу в порядке убывания их веса. вот пример : 00 06 00 00 а загружал регистр командой ldr r1, =0x80060000 если после взвести ручками старший бит, то будет выведено 80 06 00 00 на AT25F1024 тож причин думать не вижу, т.к. код "ползает" в процессе перекомпиляции по ней.
×
×
  • Создать...