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

Mar_K

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

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

  • Посещение

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


  1. STM32F7+FreeRTOS+LVGL+HAL

    Зравствуйте! Скрестил FreeRTOS, графическую либу LVGL и HAL (его использует пока только LVGL) на STM32f746 disco. Заметил следующее: 1) Если не вызывать диспетчер задач и поместить функцию lv_event_handler в бесконечный цикл, не включать DCache и ICache, то производительность одна. Если включить последние 2, то ожидаемо производительность возрастает в разы. 2) Если тотже цикл с вызвовом lv_event_handler поместить в таск и запустить диспетчер задач, то независимо от того включены ли кэши производительность низкая как при выключенных кэшах Пробовал различные комбинации размещения кучи LVGL и FreeRTOS : внутренняя память и внешняя. Драйвер дисплея (от LVGL) использует DMA с буфером во внешнем ОЗУ, работает на прерываниях. Дополнительно с помощью MPU отметил область буфера для DMA как некэшируемую. Один фиг! Еще пробовал разносить xPortSysTickHandler и Hal_IncTick на разные таймеры. Также пробовал lv_tick_inc помещать в отдельную задачу с задержкой. Вобщем, ничего не помогает -- тупо тормозит причем на простом GUI. В чем может быть причина? Правильно ли я понимаю, что причина может быть в том, что при переключении задач FreeRTOS инвалидирует кэш?
  2. Возможно. Напремер, легаси контроллер диска. Набор ATA регистров - 8 байт, альтернативный статус 1 - 4 байт.
  3. Главное для чего мне нужны исходники -- поправить минимальный размер BAR. Если существует бесплатная корка у которой можно выставить размер BAR до 1 байта, то пускай она будет без исходников -- это не страшно.
  4. Может быть... А где его исходники взять?
  5. Вы имеете ввиду Endpoint for PCI Express 3.7? у него исходников вроде как нет. Это нужно для того чтобы полностью прикинуться legacy девайсом, у которого размеры некоторых BAR равены 1 байту.
  6. Добрый день! Стоит задача заменить HW ядро на SW в уже готовом проекте на spartan 6. Пытаюсь найти opensource ядро pci express 1 lane аналог Integrated Block у Xilinx (то есть только до transaction layer без блока dma, но с поддержкой 6 BAR-ов, и legacy msi). Есть ли таковые и откуда можно скачать?
  7. Камень spartan6 150T. Кит от avnet. Ситуация такова, что набор дисков от Сигейта дружат с моим контроллером, а также некий SSD (производителя не помню, брал у коллеги потестить). Но диск от Вестерна отказывается дружить (WD1200BEVT). Разумеется, он работает с материнкой. Смотрел чипскопом. Не приходит COMWAKE от диска, вместо него приходит COMINIT. Предположил, что диск не видит OOB посылки от моего контроллера. Погуглил и нашел case на сайте xilinx, там человеку помогло изменение параметра differential voltage swing, попробовал поменять в своем контроллере (стояло дефолтное значение 000). Выставил все единицы. Теперь тренировка проходит на 1-й скорости, но на второй -- не алё. Однако, проходит не больше 50 мс и натренированный на 1-й диск почему-то снова высылает COMINIT, что, естественно, сбрасывает соединение и тренировка начинается снова. Какие только параметры я не крутил у трансивера (из доступных в визарде)-- бесполезно. Вобщем, как быть?
  8. 5) Все 8 бит нулями или только бит nIEN ? Нужно только его.
  9. По поводу 2 -- вы себя накрутили. У меня ридер фифиошки как раз этими флагами управляется, а синхронизируется только сигнал разрешения работы этого ридера. Я еще не настолько псих чтобы дизайнить как вы написали, и не вижу в теме моего поста с описанием того, что у меня именно так сделано.
  10. Все именно так. Дело не в констреинтах. Вобщем я был наивен, когда полагал что без синхронизации пока для небольшого теста можно обойтись, хотя до этого всегда делал сразу по нормальному, а потом и вовсе забыл про синхронизацию сигнала разрешения чтения FIFO специальным блоком в 200 МГц домене. Как результат 1.5 недели наблюдения эпических глюков и бессонных ночей с обтеканием потом, который вытирался полотенцем из UCF. Не забивайте на синхронизацию, люди.
  11. Нет не использую. Вчера до поздней ночи игрался с констрейнтами и пришел к выводу, что я просто не понимаю как их описать правильно. Если эти сигналы не появляются в отчете об ошибках, то схема работает на 200 МГц стабильно, но при этом в других местах в отчете появляются ошибки, там где они раньше не вылезали. В проекте до недавнего времени было 2 тактовых домена (62.5 и 75 МГц) и все разводилось и роботало четко. Но после добавления третьего (200 МГц) начались такие вот странности. Причем схема, которая тактируется от 200 МГц отдельно укладывается в плис без ошибок.
  12. Понизил частоту с 200 до 160 МГц. Работает стабильно. А на 200 нет. Может джитер адский? К сожалению нет возможности посмотреть так как нет хорошего осцила в наличии. У меня кит от Avnet.
  13. Понял. Значит можно просто забить на это, а проблема остается в неправильной обработке.
  14. Тоже больше склоняюсь к этому варианту. Делал diff с рабочей версией по svn, но пока принципиальной разницы не нашел..
  15. Клоки генерятся разными PLL и подключены через bufg естественно. Про 5 наносекунд, они не были никак вычислены, а просто взяты от балды. Род глюков таков, что если всего в фифо записывается 64 слова, то прочитается, например, 63.
  16. Проект на spartan6 -3 grade. Два тактовых домена 75 и 200 МГц. Передаю данные между ними с использованием FIFO (fifo generator 9.1), разрядность которого 64 бита чтение и запись. Тайминг аналайзер пишет, что все констрейyты выполнены, однако, в секции "Unconstrained" есть проваленные по hold time именно внутри самого FIFO (грейкаунтер похоже: U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/wr_pntr_gc_4 to U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].rd_stg_inst/Q_4). Соответственно проект глючит. У меня несколько вопросов: 1) Реально ли получить работающий FIFO с такими параметрами в данном кристале? 2) Как правильно написать ограничения? По поводу второго вопроса читал DS317, но там для 16 разрядного случая. Еще задавал timespec на оба клока и устанавливал maxdelay datapathonly на передачу данных между ними равную 5ns. После чего из секции unconstrained эти пути пропадали и ошибок вообще не наблюдалось в аналайзере, но в работающем железе по прежнему глюки. Если вместо 200 МГц запустить, на, скажем, 150 МГц то все гут.
  17. ATMega8a AU глюк порта В?

    Да. Клок от внутреннего генератора. Пробовал на разных клоках 1-8МГц -- один фиг. Все, разобрался. Дело было не в машине. Забыл волшебный флаг линкеру указать -mmcu=atmega8. В результате прога начиналась не с main :) Всем спасибо.
  18. ATMega8a AU глюк порта В?

    Делал уже так. Все равно не работает. Такой код написал, чтобы легче было проверять какой бит глючит. А первые две строки для перестраховки. Кстати, проверил на порту D -- таже фигня.
  19. ATMega8a AU глюк порта В?

    Запаял сей микроконтроллер в плату. Прошивка заливается по SPI. Код: int main(void) { asm("cli"); SPCR &= ~(1<<SPE); SFIOR &= ~(1<<PUD); DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); PORTB = 0x00; while(1) { PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); _delay_ms(1000); PORTB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7)); _delay_ms(1000); } return 0; } 1) Если включать все биты и выключать тоже все, то на всех кроме бита 4 держится напряжение 5 вольт, а на бите 4 меняется 0-5-0-5. 2) Если выключить хотя бы один любой бит (DDRn = 0 && PORTn = 0 всегда), а все остальные переключать, то на ножке бита n держится уровень напряжения 5 вольт, а все остальные биты переключатся. На замыкание соседние пины проверял .. Смотрел какой код генерит avr-g++ -- все ок. Что это, баг или фича? PS: до того как припаял эту микруху, на точно такойже плате стояла atmega8 и такого не наблюдалось.
  20. Раньше учился только по даташитам, статьям, книгам, исходникам, и т.п. Сходил в прошлом году на тренинги от Xilinx по PCIe и MGT, результат не заставил себя ждать. Сэкономил массы времени. Плюс поддержка. Всегда можно позвонить и задать вопрос профессионалам. После тренингов уже знаешь куда смотреть, что почитать, появляется чувство уверенности. Единственное, не порадовало качество печатного материала (хреново напечатано), который мне выдали, но к нему и обращаться почти не приходилось.
  21. Вобщем, как выяснил, проблема не в размерах BAR. Для того, чтобы BIOS увидил контроллер и произвел загрузку с него нужно написать драйвер и положить его в XROM. А операционки дальше грузят свои драйвера.
  22. Продолжаю свой рассказ. Нашел кучу багов в своей sata корке, естественно, то что не тестировал ранее из-за большой сложности и повылезло. Сечас в linux нормально определяется диск, могу с помощью dd прочитать любое количество секторов, начиная с любого. Судя по логам, диск конфигурируется в PIO4 mode. Пробую читать 8 мегабайт блоками по 1КБ, скорость еле дотягивала до 1 МБ/с. Попробовал записать на диск и все повисло, этого я и ждал, так как это дело еще не отлажено. С этим я разберусь В винде ситуация прежняя -- ресурсы выделены, но в BAR'ы никто не пишет, соответственно диск не определяется, мой контроллер в диспетчере висит со значком конфликта. BIOS также нефига не видит его. Все-таки склоняюсь к тому, что это из-за BAR'ов по 128 байт..., BIOS и винда проверяют размер при выделении ресурсов (наверное). У кого какие соображения по этому поводу?
  23. Сейчас ситуация следующая. Установил ClassCode = 0x010105 (то есть в IDE контроллер с двумя каналами в native PCI mode). BIOS контроллер находит, и ставит ему прерывание 14 или 15, но никаких обращений в BAR'ы не делает, в BIOS Setup попрежнему без изменений. В window смотрю в PCITree, что IO выделено для всех BAR'ов, но при загрузке никаках обращений к BAR'ам также не происходит. В диспетчере устройств попрежнему ошибка( устройство не использует ресурсов так как, наверное, в его работе присутсвуют ошибки) В Linux ситуация немного иная. При загрузке во все 4 BAR'a есть обращения. Для первого канала в регистр device control пишется значение 0x0A, затем из регистра status командного блока АТА читается статуст (чипскоп показывает 0x50 что говорит, что устройство готово к использованию). Для второго канала выполняются теже действия. Посмотрел в логах. Ошибок нет, устройству назначен драйвер ata_piix. На этом все. Сам диск не определяется.
  24. Попробовал указать нужные значения BAR'ов вручную в исходниках pcie корки. В XP драйвер устанавливается, но ресурсы опять же не выделяются (пишет, что не хватает ресурсов). В PCI Tree почему-то все BAR'ы моей платы теперь имеют размер 8 байт, хотя я указывал разные значения (4, 8, 16 байт). То есть установить меньше 128 байт на IO BAR можно в обход гуя, но вот как оно работать будет...и будет ли? Направьте пожалуйста на путь истинный.
  25. Добрый день. Написал Sata2 контроллер для virtex5vfx. Поддерживает DMA, PIO -- как в спецификации написано, реализованы ata-шные теневые регистры. Предполагается работа в режие legacy. Прикрутил к нему интерфейс pci express gen1. Для этого использую PCI express end point block plus. Пока задача минимум, чтобы его увидел bios и увидел сам диск. Работа в режиме PIO пока. Выделил 4 IO BAR'а по 128 байт (на ATA command и DISK control интерфейсы). Пробовал прописать Class Code = 0x010185 и 0x010601. В BIOS ничего нового не появляется. Загружаю винду (XP SP3), в диспетчере устройств моя плата определяется как "Стандартный двухканальный контроллер IDE", но ресурсы IO ей не выделяются (пишет, что не хватает ресурсов). Посмотрел как у других контроллеров BAR'ы реализованы с помощью проги PCITree. Там такая схема: BAR0,BAR2 -- IO 8 bytes, BAR1,BAR3 -- IO 4 bytes, BAR4,BAR5 -- IO 16 bytes. Корка от Xilinx не позволяет выделить меньше 128 байт на IO BAR. Интересует несколько вопросов: 1) Могут ли быть проблемы именно из-за того что у меня BAR'ы по 128 байт? Если да, то как сделать их правильными по 4,8,16? 2) Какие еще танцы нужны, чтобы диск увиделся операционкой?
×
×
  • Создать...