Jump to content

    

b-volkov

Свой
  • Content Count

    172
  • Joined

  • Last visited

Community Reputation

0 Обычный

About b-volkov

  • Rank
    Частый гость

Контакты

  • Сайт
    http://

Информация

  • Город
    г. Троицк

Recent Profile Visitors

1882 profile views
  1. Помогите разобраться с LwIP!

    Совершенно с Вами согласен. Мало того, у меня уже есть реализация под другой камень своего простенького (если не сказать - примитивненького) UDP, которого вполне хватает для моих задач. Просто надумал освоить STM32F7, купил КИТ и вижу, что в комплекте уже готовый полноценный IP-стек. В принципе, не исключена ситуация, что когда-нибудь моему девайсу придется работать с какой либо сторонней софтиной или железякой, которые могут только по TCP. Вот и решил попробовать, не думал, что эта вещь такая капризная. Ну раз не получается с LwIP, тогда пойдем ниже. Тут уже писали ранее писали о глючности MAC-драйверов. Речь идет о HAL-драйвере эзернета? Как тогда быть? Самому писать?
  2. Помогите разобраться с LwIP!

    To: dimka76 UDP я пока не пробовал, хотелось бы с TCP разобраться... Ваш проект с FreeRTOS (или какой другой OS)? Просто я использую демку от IAR-STM32F746xx-SK которую сам переделывал под STM32F746-DISCOVERY. Эта не самая новая демка (main - файл датирован 14 годом)и, возможно, не самая "прямая", но это единственный проект, который я смог найти без FreeRTOS,которая мне на фиг не нужна. Родной пример для этого КИТа, увы, работает с RTOS, а "выпилить" ее мне ума не хватило, слишком глубоко она там засела. Мне TCP нужна исключительно для "получил/передал пакет" . По этому просьба: если у кого есть работающие примеры/проекты использования lwip БЕЗ всяких там осей - буду крайне признателен.
  3. Помогите разобраться с LwIP!

    Так я не выкидывал инициализацию стека, просто это не попало в листинг :) . Я выкинул только HTTP-сервер EthHandle.Instance = ETH; EthHandle.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; EthHandle.Init.Speed = ETH_SPEED_100M; EthHandle.Init.DuplexMode = ETH_MODE_FULLDUPLEX; EthHandle.Init.MACAddr = &macaddr[0]; EthHandle.Init.RxMode = ETH_RXPOLLING_MODE; EthHandle.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE; EthHandle.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII; EthHandle.Init.PhyAddress = 0; EthHandle.State = HAL_ETH_STATE_RESET; if (HAL_OK != HAL_ETH_Init(&EthHandle)) { printf("ETH init fail!\n"); while(1); } printf("ETH init OK.\n"); /* Initialize Tx Descriptors list: Chain Mode */ HAL_ETH_DMATxDescListInit(&EthHandle, DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB); /* Initialize Rx Descriptors list: Chain Mode */ HAL_ETH_DMARxDescListInit(&EthHandle, DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB); /* Initilaize the LwIP stack */ LwIP_Init(); Думаю, если бы МАС не был привязан к стеку, вообще бы ничего не работало. А тут просто непонятные задержки... А что именно Вы настраивали в стеке? У меня такое ощущение, что либо не те настройки, либо я чего-то не делаю в callback-функции.
  4. Пытаюсь разобраться с LwIP под STM32F7. За основу взята одна из демок Web-сервера без FreeRTOS. HTTP я выбросил, взяв от туда куски связанные с инициализацией LwIP. Задача - просто передать пакет пот TCP от компа в контроллер. Контроллер является сервером. Инициалицая, биндинг и соединение проходят (правда, не каждый раз, но это второй вопрос), а вот при получении пакета получается какая-то фигня: Контроллер получает пакет, но акнолидж почему-то не отправляет. Через пару секунд винда делает повторную посылку и тогда сразу отправляется два акнолиджа. Если отправлять большой кусок данных, то ситуация немного лучше: акнолидж на первый фрейм так-же не приходит, пока не будет повтора, а последующие подтверждаются примерно через 200мс. Но скорость как-то все-равно не айс: 100к за 5 секунд. Вот код инициализации и callback функции: /* Инициализация */ MyPCB = tcp_new(); tcp_setprio(MyPCB, 64); err = tcp_bind(MyPCB,IP_ADDR_ANY, 55); MyPCB = tcp_listen(MyPCB); tcp_arg(MyPCB, MyPCB); tcp_accept(MyPCB, MyTCPAccept); /* Main loop */ while (1) { LwIP_Pkt_Handle(); LwIP_Periodic_Handle(timeCounter); } } /*Callback фуккции*/ static err_t MyTCPAccept(void *arg, struct tcp_pcb *pcb, err_t err) { struct tcp_pcb_listen *lpcb = (struct tcp_pcb_listen*)arg; tcp_accepted(lpcb); tcp_setprio(pcb, 64); tcp_arg(pcb, 00); tcp_recv(pcb, MyTCPRecv); tcp_err(pcb, MyTCPErr); tcp_poll(pcb, 0, 4); tcp_sent(pcb, 0); return ERR_OK; } static err_t MyTCPRecv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) { printf ("Received %d\n",p->tot_len); tcp_recved(pcb, p->tot_len); pbuf_free(p); return ERR_OK; } static void MyTCPErr(void *arg, err_t err) { printf ("LWP_ERR: %d\n",err); } Что я не так делаю?
  5. Спасибо! Как-то не пришло в голову, что в селекторе можно вводить значение.
  6. Terminal 1.9b в самом деле позволяет выставить 3Мбита/с и даже как-то работает, но совсем глючно. Во-первых - очень медленно. У меня сообщения длиной 30 символов идут с интервалом 100мс, и он не успевает их вычитывать. Сообщения иногда пропадают или обрезаются, а после выключения девайса еще долго продолжают выводится в окно терминалки из буфера. А во-вторых, через несколько минут работы он тупо виснет. Teraterm - максимум 921600.
  7. Нужно отображать текстовые данные от устройства через USB-COM (чип FT230X). Сам чип позволяет работать до 3 Мбит/с, но нужна терминалка, которая бы позволяла выставить такую скорость. Все, которые мне удалось найти имеют ограниченный набор скоростей в лучшем случае до 230К. Может чего порекомендуете?
  8. Вожусь с IAP контроллера LPC43xx, (хотя думаю, и другие камни NXP не сильно отличаются в этом плане). В даташите указано, что команда "Prepare sectors" дается пред операцией стирания или записи во FLASH. Вопрос: как долго после этой команды сектора остаются "подготовленными"? Понятно, что перед стиранием секторов необходимо давать команду подготовки. А если сразу после стирания я хочу произвести запись во FLASH, мне снова надо давать "Prepare sectors"? Хорошо, если надо, то следующий вопрос: если в один и тот же сектор мне нужно производить несколько процедур записи подряд, то мне каждый раз надо его "подготавливать"?
  9. Dessignator для монтажки

    Всем спасибо!
  10. Озадачился созданием монтажной схемы в Альтиуме. Делать ее основе слоя шелкографии не вариант: местами слишком плотный монтаж и десигнатор в этом слое влезает далеко не везде. Возникает естественное желание сделать так, что бы контура компонентов и их номера отображались в отдельном слое. Насколько я понимаю, в PCB у компонента предусмотрено только две текстовые стороки: Designator, который выводится на шелкографию и Comment, который я хочу вывести на дополнительный слой. Вопрос: можно ли сделать так, что бы текст комментария автоматически приравнивался десигнатору? Иными словами, я хочу, что бы у меня было две строки десигнатора, одна для шелкографии, другая для монтажки. Уж больно не хочется вручную переписывать десигнатор в коментарий для каждого компонента. Пытался вписать в поле коментария "=Designator" - не помогло :)
  11. Не могу напрямую (без термального барьера) подключить SMD-площадки к определенным полигонам. Мои действия: 1. Создаю класс цепей "DirPolygonNets"и добавляю в него те самые цепи, к которым подключены эти полигоны. 2. В "Rules->Plane->Polygon Connect Style" создаю новое правило DirPolygonConnect. 3. В выпадающих списках выбираю "Net Class" и имя созданного мной класса "DirPolygonNets", а "Connect Style" = "Direct Connect" 4. Применяю изменения, делаю перерисовку и ...ничего. Термальный барьер на месте. А вот если а "Connect Style" = "Direct Connect" сделать в базовом правиле "PolygonConnect", которое распространяется на все объекты, то прямое подсоединение получается. Что я упустил?
  12. А если не секрет - что это за настройки и где их искать.
  13. В очередной раз решил посмотреть плату в 3D, и заметил, что ее цвет стал бежевым вместо зеленого. Начал разбираться и понял, что не отображается слой маски. Включен режим отображения "All Layers", в окне "View Configuration" все галочки стоят, в 2D маска есть. Другие PCB-файлы отображаются нормально, хотя настройки слоев у них те-же самые. В чем может быть дело?
  14. Подбирая розетку RG-45 со встроенным трансформатором столкнулся с тем, что существует куча различных вариантов их распиновки. Я нашел как минимум три варианта только для распиновки трансформатора, плюс у некоторых из них есть еще и разные варианты включения светодиодов. Вопрос: существует ли какой-то общепринятый, наиболее распространенный ( в том числе и у поставщиков) вариант? Или закладываться на то, что есть в ближайшем чип-дипе и надеяться на то, что он будет "доставаем" и плтлм.