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

Dec_NN

Свой
  • Постов

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

  • Посещение

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


  1. Добрый день! Подскажите кто в России надежно занимается поставкой Gowin? И у кого можно получить лицензию на Gowin EDA?
  2. В итоге Ангстрем вроде как делает, но со сроком поставки от года. По Интегралу сроки пока не знаю, но в перечне минпромторга их не видно.
  3. Добрый день! Подскажите, есть ли российские производители стандартной логики в корпусах soic14 и soic16 с приемкой ОТК? Желательно присутствующие в перечне минпромторга. Желательно, чтобы можно было купить. Спасибо.
  4. Каталога производимой продукции на сайте нет. Даже после удачной регистрации. Напишите им на электронку запрос, они пришлют вам информацию.
  5. Не понимаю как это выяснить.
  6. Т.е. по установке бита RS в статусном регистре DMA? Попробую сейчас, но вроде я уже это проверял. Посмотрел сейчас регистр настройки DMA, в нем бит RSF=0, т.е. включен режим cut-through mode. Может в этом проблема.
  7. Вы имеете ввиду PBUF_POOL_SIZE? Сейчас PBUF_POOL_SIZE = 16, PBUF_POOL_BUFSIZE = 1200 байт Делал и больше, никакого влияния не оказывает. Платы соединены напрямую, так что других пакетов там нет, кроме ARP запросов ответов. Если рассуждать логически, т.к. теряется последний пакет в пачке, то значит он куда то не влезает. Но места куда влезть более чем достаточно. Ну и непонятно как влияет наличие передачи по UDP. Приемные и передающие буфера ведь должны быть разделены и никак не пересекаться.
  8. Да вроде должна успевать. Проверка на входящие пакеты производится каждые 30 мкс. Делал чаще, ничего не меняется. В чем то здесь в другом проблема.
  9. Добрый день! Не могу до конца разобраться с проблемой. Прошу подсказки. STM32F767 LWIP RAW UDP Две одинаковые платы обмениваются пакетами UDP. Раз в 1мс посылается 5 пакетов по 272 байта. Пакеты отправляются пачкой, практически друг за другом с задержкой где то 15-20 мкс, затем пауза. В итоге периодически на приеме происходят пропадания пакетов. Сначала все принимается (минуту-две), затем несколько секунд могут происходить пропадания, затем все опять принимается исправно и т.д. При этом: 1. Пропадают исключительно пакеты отправляемые из пачки пятыми, очень редко четвертыми. Пакеты с 1го по 3-й не теряются совсем. 2. Пропадания возникают только если на данной плате производится передача UDP. Если на плате отключить передачу UDP пакетов, то на приеме ошибки исчезают. 3. Выяснено, что пропадания совпадают с моментами, когда в функции low_level_input программа попадает в условие, что дескриптор принадлежит хосту и не может быть получен DMA. /* When Rx Buffer unavailable flag is set: clear it and resume reception */ if ((heth.Instance->DMASR & ETH_DMASR_RBUS) != (uint32_t)RESET) { /* Clear RBUS ETHERNET DMA flag */ heth.Instance->DMASR = ETH_DMASR_RBUS; /* Resume DMA reception */ heth.Instance->DMARPDR = 0; test_counter++; } В какой то момент test_counter начинает активно расти и в это же время начинают пропадать пакеты. Затем пропадания прекращаются и test_counter также перестает расти. Значение test_counter значительно больше чем количество пропаданий. Не могу понять куда дальше смотреть, почему теряются только последние пакеты из пачки и как это связано с передачей.
  10. Отключил DCache. Все стало работать. Почему включение кеша данных вызывает мою проблему пока не понимаю. Буду разбираться.
  11. Это первый ARM с которым работаю, так уж досталось по наследству, и опыта работы с ними нет. RTOS обязательно буду осваивать.
  12. Я пробовал делать похожим образом, но дело в том, что в основном цикле есть куски надолго блокирующие выполнение кода. Например функция вывода статистики в консоль и т.д. и пока дело дойдет до проверки флага, часть пакетов просто теряется. Поэтому решил сделать прерывание по таймеру, чтобы гарантированно забирать пришедшие пакеты. Upd: Сейчас попробовал убрать прерывание и делать вызов ethernetif_input() из основного цикла. Ничего не изменилось.
  13. А каким образом тогда обеспечить регулярную проверку входящих пакетов? В основном цикле с необходимой частотой этого не сделать. Здесь я, к сожалению, не совсем понимаю о чем речь. Не заходит в udp_receive handler по причине того, что не проходит условие в строчке указанной выше.
  14. Похоже затыкается LWIP. А именно в файле stm32f7xx_hal_eth.c условие /* Check if segment is not owned by DMA */ if(((heth->RxDesc->Status & ETH_DMARXDESC_OWN) == (uint32_t)RESET)) никогда не срабатывает.
  15. STM32F7 (RAM: 512Кбайт). Среда CubeIDE. Есть функция в которой принятые UDP пакеты складываются в кольцевые буферы. Буферы - это глобальный трехмерный массив: udp_rxbuf[snum][128][256], где snum - количество сокетов. Т.е. для каждого сокета можно сохранить до 128 пакетов по 256 байт. При количестве сокетов до 3-х все работает корректно. Как только увеличиваю размер массива до работы с 4-мя сокетами (snum=4), все ломается. Работа с сокетами происходит следующим образом: Есть таймер. В его обработчике прерывания вызываются функции: ethernetif_input(&gnetif); sys_check_timeouts(); При получении udp пакета программа прыгает в в связанную с сокетом функцию void udp_receive_handler(void *arg, struct udp_pcb *upcb, struct pbuf *p, const struct ip4_addr *addr, u16_t port), где полученный пакет укладывается в буффер. Хотя массив буферов и большой - 160 кбайт, но линкер показывает, что памяти RAM еще вполне достаточно, больше половины свободно. Понимаю, что где то, что то нехватает, или что то на что то налазиет, но не знаю что. Т.к. данный массив глобальный, он ведь никак не должен забивать стек, но что то происходит и все ломается. Подскажите, что я делаю не так.
  16. Действительно. Вы правы. Огромное спасибо. Теперь все понял. Проблема не в передаче указателя, а в работе функции sizeof. func2(buf_1, 4) из вашего примера заменил на func2(buf_1, size);
  17. STM32. STM32CubeIde. Есть глобальный массив. Передаю указатель на него в функцию. Код прописанный в функции меняет значения элементов массива. Затем из этой функции мне необходимо вызвать еще одну, также с указанием данного массива. Вот тут не получается. Вторая функция уже не модифицирует элементы того самого глобального массива. void func1(uint8_t *buf_1); void func2(uint8_t *buf_2); uint8_t my_array[50]; void main { func1(my_array); } void func1(uint8_t *buf_1) { memset(buf_1, 0x00, sizeof(buf_1)); // Здесь все нормально, все элементы my_array устанавливаются в 0 func2(buf_1); } void func2(uint8_t *buf_2) { memset(buf_2, 0xFF, sizeof(buf_2)); // Здесь только первые 4 элемента my_array устанавливаются в FF, остальные не модифицируются } Также компилятор выдает warning: argument to 'sizeof' in 'memset' call is the same expression as the destination; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess] Понимаю, что как-то ошибочно ссылаюсь на массив при вызове второй функции, но не понимаю как сделать правильно.
  18. Ясно. Спасибо. Дорого конечно, в отличии от серии Nucleo, но есть вся обвязка - Ethernet, USB, TFT, кодеки. Плюс программатор не нужно брать отдельно. Еще бы туда Cyclon V от Альтеры, вообще красота была бы.
  19. Добрый день! Есть желание научиться работать с STM32. Для этого подбираю отладочную плату. Вроде как нравится 32F769IDISCOVERY. Все более менее необходимое на ней есть. Единственное чего не вижу, так это какого-нибудь разъема для прямого подключения к GPIO, но явно возникнет необходимость подключать к платке FPGA. При этом есть набор разъемов для поключения Arduino Uno V3. Вот вопрос. Можно ли использовать данные разъемы просто для доступа к портам которые на них подключены? Или порт Ардуино имеет какие то хитрые особенности? Спасибо.
  20. Сигнал FAS для E3 (g.753)

    Добрый день! Производится разработка устройства с портом E3. Структура кадра делается согласно ITU-T G.753. В данной рекомендации 12-битное значение сигнала выравнивания кадра FAS = 111110100000. В тоже время в описании на советскую систему ИКМ-480, которая работает на основе данной рекомендации ITU-T G.753, FAS имеет другое значение, FAS = 111101000000. Можно конечно предположить, что ИКМ-480 имеет не полное соответствие рекомендации G.753, но есть еще такой момент. Имеем тестер российского производства ТИС-Е1 Е2 Е3 который умеет выдавать и анализировать поток Е3. Если в настройках тестера установить формат кадра G.753, то на выходе получаем синхрослово 111101000000, т.е. точно такое же как в ИКМ-480, но при этом не соответствующее заявленному стандарту. И вот где искать правду? Какое значение FAS использовать? Что то я запутался.
  21. Добрый день. Не знаю в какой раздел написать, поэтому спрошу здесь. Существуют ли какие нибудь требования к наименованиям стандартных разъемов на корпусе прибора? Или это не регламентировано и можно делать как фантазия подскажет? К примеру разъем низковольтного питания на корпусе прибора можно обозначить "Питание", либо "Питание =12 В", либо "U = 12В". Вот есть ли какой то ГОСТ который определяет, что именно так и не иначе?
  22. Ну да, поток далее идет на LIU Е1. У меня Exar-овские с джиттеродавкой, но я что то сомневаюсь, что она справится с таким сигналом. Надо подумать, попробовать. Мне нехватеат знаний, чтобы реализовать DDS в ПЛИС. Я пробовал подстраивать частоту клоком 2048x64. Делал счетчики с делением на 63 и 65, но получается слишком большой шаг подстройки.
  23. Добрый день! Пытаюсь реализовать на ПЛИС асинхронный мультиплексор/демультиплексор потока Е2. На стороне демультиплексора, распределитель записи раскидывает потоки Е1 из принятого Е2 на четыре буфера из которых нужно вычитывать данные клоком 2048 с подстройкой к темпу приходящих данных. Делаю все согласно G.745. Так вот получается, что запись в буфера со стороны принятого Е2 идет рваным темпом, т.к. имеются пропуски на временных интервалах служебных символов потока Е2 и команд согласования скоростей. Как в таком случае по науке делают подстройку ФАПЧ? Ведь стандартная схема с фазовым детектором работать не будет. По крайней мере мне так кажется. Так вот я решил следить за приходящим темпом по разнице указателей чтения и записи в буфер. Если УЧ приближается к УЗ, то снижаем скорость клока чтения 2048, если удаляется то наоборот поднимаем. Насколько такой подход имеет право на жизнь? И еще сопутствующий вопрос. Можно ли в качестве ГУНа для подстройки частоты применить синтезатор на основе DDS? Что то типа AD9838. Почему то нигде не встречал описание такого решения, а вроде как оно видится достаточно работоспособным, ведь такие синтезаторы перестраиваются с малым шагом, без скачков фазы. Можно было бы плавно крутить частоту при удалении и приближении указаелей в буфере. Если кто работает в данной теме направьте на путь истинный. Спасибо.
  24. Понятно. Вообщем нужно попробовать 9.1 поставить. Спасибо.
  25. Добрый день. Решил освоить Active-HDL. Версия 10.1. И почему то не выходит получить результаты моделирования при задании входных воздействий с помощью testbench на VHDL. В окне waveform нет результирующих выходных сигналов, точнее они неизвестны. Вот если задать сигналы на входы встроенными стимуляторами, то все ок, сигналы на выходах вижу, а с тестбенчем нет. Вот например простой код трехвходового "И": library IEEE; use IEEE.STD_LOGIC_1164.all; entity test_and is port( X1 : in STD_LOGIC; X2 : in STD_LOGIC; X3 : in STD_LOGIC; Y : out STD_LOGIC ); end test_and; architecture test_and of test_and is begin Y <= X1 and X2 and X3; end test_and; Вот листинг testbench: library ieee; use ieee.std_logic_1164.all; entity test_and_tb is end test_and_tb; architecture TB_ARCHITECTURE of test_and_tb is component test_and port( X1 : in STD_LOGIC; X2 : in STD_LOGIC; X3 : in STD_LOGIC; Y : out STD_LOGIC ); end component; signal X1 : STD_LOGIC; signal X2 : STD_LOGIC; signal X3 : STD_LOGIC; signal Y : STD_LOGIC; begin UUT : test_and port map( X1 => X1, X2 => X2, X3 => X3, Y => Y ); process begin for i in 0 to 10 loop X1 <= '0'; wait for 50 ns; X1 <= '1'; wait for 50 ns; end loop; end process; process begin for i in 0 to 10 loop X2 <= '0'; wait for 120 ns; X2 <= '1'; wait for 120 ns; end loop; end process; process begin for i in 0 to 10 loop X3 <= '0'; wait for 310 ns; X3 <= '1'; wait for 310 ns; end loop; end process; end TB_ARCHITECTURE; configuration TESTBENCH_FOR_test_and of test_and_tb is for TB_ARCHITECTURE for UUT : test_and use entity work.test_and(test_and); end for; end for; end TESTBENCH_FOR_test_and; На картинке результат моделирования, значение выхода Y не определено.
×
×
  • Создать...