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

pil123456789

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

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

  • Посещение

Сообщения, опубликованные pil123456789


  1. Приветствую.

    Интересует вопрос, возможна ли нормальная работа одновременно 2-х USB на STM32F4xx (используется STM32F429)? У кого-то удачный опыт есть? Один USB будет Host, другой Device. По документации ограничений не нашёл, может есть какие-то особенности.

    работает так же как и по отдельности

    реализовали эту схему. делали USB_FULLSPEED -device, USB_HSPEED - host. Работают они полностью независимо.

  2. Почему же не придумать? Обычное TCP-соединение, по которому идет обмен по уже существующему для устройства протоколу с минимальной обвязкой.

    В случае с "белым-IP" даже обвязка не нужна.

     

    Протокол придумываем с нуля, ничего существующего нет.

    На мой взгляд при выборе протоколов стоит стремится выбирать из существующего, а не плодить сущности. Если мы связываем устройство каким либо образом с миром ПК, то подход избавляет от необходимости писать ответную часть протокола.

     

     

    Сделайте свой TCP сервер с нужным протоколом.

    Возьмите готовый сервер (MQTT например) и пробросьте порт.

    Используйте http/https протокол с VPS за 20 руб в месяц.

    Используйте открытый сервер для IoT (штук 20 в гугле найдутся на первой странице)

     

    И еще вариантов немеряно есть.

     

    >> Сделайте свой TCP сервер с нужным протоколом.

    Вопрос протокола и стоит

     

    >> Возьмите готовый сервер (MQTT например) и пробросьте порт.

    Спасибо. Это интересно, буду читать.

     

    >>Используйте http/https протокол с VPS за 20 руб в месяц.

    Это вопрос сервера. Свой или "облачный". Пока не стоит.

     

    >>Используйте открытый сервер для IoT (штук 20 в гугле найдутся на первой странице)

    А встречали такие, где не только красивая обертка, но и файло-передача логов и обновление прошивки?

  3. FTP клиент на каждом устройстве и единый FTP сервер в Интернете-отличное и универсальное решение.

    Для команд делается скриптик-файл, который забирается с FTP во время очередного сеанса связи и исполняется.

     

    Но не все FTP сервера нормально живут в условиях "сотни клиентов доступаются одновременно", этот момент нужно проверять. Иногда приходится разбивать клиентов на несколько серверов.

    Дело происходит на cortex-m. Так что без скриптов. Но здорово, что велосипед не мой. Интересует какие еще варианты возможны.

    Например, у колеги возникла идея проброса отдельного порта ввода вывода(в примерах tty) на сервере на порт tcp. Socat в linux вроди такое умеет, может и ssl. И общаются они через организованный псевдо последовательный порт. (Tty over tcp).

  4. Здравствуйте!

    Есть вопрос, может кто сталкивался с подобной задачкой.

     

    Есть устройство на Cortex M3 c GPRS. Нужно организовать доступ к нему из интернета со следующим функционалом:

    1. Обновление прошивки.

    2. Постоянное получение текстовых логов работы.

    3. Конфигурировать устройство.

    4. Минимально управлять. Короткий список команд.

     

    Естественно хочется что то стандартное повозможности, минимум велосипедов.

    Единственное, что смог сам придумать, это:

    1. Есть сервер FTPS со статическим IP

    2. Устройство конектиться к нему и происходит двухсторонний обмен. Например есть папки IN и OUT. В одну складываем логи, из другой берем команды.

     

    FTPS, так как уже есть реализации и FTP и SSL для cortex.

     

    Доплачивать за static IP для устройства не хочется.

     

    Сталкивались с другими вариантами решения обмена по GPRS на кнтроллерах?

  5. Если SPI по скорости подходит то он удобен. Помотрите макс скорость SPI вашего контроллера.

    Если нет то можно попробовать сделать параллельную передачу. Соединяете контроллер с FPGA 11 проводами.

    Про SPI понятно, как вариант. Второе - интерфейс внешний памяти, может некую двухстороннюю память между ними поставить? Или сделать FPGA - внешней памятью для контроллера?

    А кто-нибудь пробовал работать на UART со скоростью 5-7Мбод?

    Да контроллер stm32f217, 7.5Мбод UART работает.

    Можно сделать один многопоточный UART. И он будет работать на 17 кратной частоте. При этом логики надо будет меньше,чем при 17 отдельных...

    Теперь вот такой вопрос - насколько быстрый у Вас CPU?

    CPU - stm32f217 120МГц - пока так.

    Хотелось бы распаралелить максимально, чтобы посылки в UARTы уходили одновременно.

    При заявленной требуемой скорости наоборот лучше предельное распаралеливание, тем более, что, например, стандартный Xilinx-совский UART, занимает предельно мало ресурсов и 17 UART легко разметстятся в самом небольшом Spartan-не, другое дело, что для работы он требует 16-кратной тактовой, а это уже на заявленной скорости определенная проблема.

    А можно объяснить в чем проблема поподробнее?

    Используйте контроллер, встроенный в FPGA: Nios II (Altera) или Microblaze (Xilinx). Чем не устраивает такое решение?

    Тоже думал об этом. Но опыта подобного нет. Программирую контроллеры, немного знаком с FPGA простенькими.

    Боюсь не потяну.

     

    + Спасибо всем за участие.

  6. Мне кажется, что FPGA скажем Cyclon II или III, не менее EP2C8.

    И, может для таких скоростных последовательных интерфейсов, не UART а SPI, если проект позволяет?

    Спасибо за ответ.

    Все таки чем связать с контроллером?

     

    Там потом UART -> rs485. Расстояние 0,5-1м + помехи.

  7. Не вдаваясь в подробности "чем обусловлена скорость обмена 5-7 Мбод"

    Скажу следующее. Для реализации честного UARTа на скорость 115200 ушло 177 логических элементов Flex6000

    Если экстраполировать на ваши 17, то получаем порядка 3000 ЛЭ на UART'ы.

    Плюс добавить всякие буферы и пр.

    Таким образом думаю надо ориентироваться к примеру на cyclon от 5000 ЛЭ и более

    Скорость обусловлена задачей, как и количество абонентов.

    С количеством логических элементов будет понятно при моделировании на компе

     

    Интересен вопрос как соединить CPU <-> FPGA. отпадают всякие uart, spi. Вот думаю через общую память как то?

  8. Нужна ваша экспертная помощь новичку в ПЛИС.

    Нужно выбрать ПЛИС (или несколько маленьких ПЛИС)

    Задача:

    1. Обмен с контроллером, который получает данные по Ethernet.

    Я пока вижу это через какую то двухстороннюю память, но вопрос открыт.

    2. Выдача информации на 17 Uart со скоростями 5-7Мбод

    3. Получение информации с 17 uart, скорость не принципиальна.

    4. Uart'ы fullduplex, т.е. 17 uart на вход и 17 на выход.

    5. FPGA не сложно упаковывет посылки для uart (подсчет простеньких контрольных сумм)

     

    Вопросы:

    1. Выбор FPGA

    2. как принято осуществлять обмен FPGA<->CPU.

    Объем данных на выход ~50 байт CPU->FPGA (с высокой скоростью)

    на вход ~100-200 байт FPGZ->CPU (скорость не критична)

     

    Заранее спасибо всем сочуствующим.

  9. Давайте о терминах. Странно будет описывать rs-485 работающий на скорости 5-10Мбит и имеющий топологию звезды.

    Это далеко от стандарта. Это уже не rs-485. Это что-то другое - назовите Pil-485 и ни каких проблем.

    Тоже самое о Ethetnet, если принимать что пользуешься только стандартом на физический уровень. Назовем Pilnet и

    никто вам слова не скажет. Единственно, что не понятно - что за устройство является источников такой уймы данных.

    Если это какое-то стандартное с интерфейсом Ethernet, то никуда не денешься, надо придерживаться стандарта. Если

    устройство разрабатывается вами, то какие проблемы?

    Источник это пока теория, но точно не моя разработка, соответственно Ethernet стандартен.

    Rs485 5-10Мбод звездой - это просто 16 стандартных RS485 (точка-точка)

     

    Да и аля-UART можно. На любом ARM'е с DMA, только поставить защелку придется. Какой-нибудь LPC17xx вполне подойдет. Да и STM32, видимо, тоже.

     

    Принимаете из сети пакет, проворачиваете биты (можно и на большом брате проворачивать) и укладываете в буфер, а DMA по таймеру сам отправит в параллельный порт. Выход этого же таймера надо использовать как CLK, если это SPI, либо как тактовый сигнал защелок, если это UART - чтобы не было джиттера.

     

    Однако, так хорошо получится только в том случае, если надо организовать исключительно вывод. При необходимости ввода данных можно только SPI организовать без геморроя.

     

    Непонятно, что такое джиттер?

    А получится эмитировать 16 UART'ов? (SPI не так хорош, но можно и 16 SPI).

  10. Ух ты, сколько ответили. Спасибо!

     

    1. Нестандартный Ethernet не пойдет, т.к. этим выходом наша подсистема заканчивается. Странно в документации будет это описывать. Все делается как ОКР, не хватит 100Мбит - вижу тока вариант 1Гб сеть ну или что то последовательное типа LVDS. На данный момент 100Мбит Ethernet, до второй ревизии как минимум.

    2. Дальше внутряння сеть RS485 со скоростями 5-10Мбод. Причем не стандартная шина, а звезда (в устройстве так надежнее/удобнее). Оконечниками будут STM32F205 (мне оно ближе).

    3. На роль центрального узла Ethernet -> 16*RS485 думаю попробовать тот же stm32 + CPLD MAX V, на макетке попробуем успеет ли stm выплевывать. (может посоветуете через что их лучше соединить?). Не хватит stm, буду думать. Мощные FPGA для меня туманная тема.

    4. Передача двунаправленная, но посылки RS485 -> Ethernet редкие. Думаю нужно ли закладывать фул дуплекс или хватит 1/2 дуплекс RS485.

  11. Вопрос изменился.

    Оконечники стало ясно что можно сделать на контроллерах используя имеющиеся наработки.

     

    Теперь вопрос как сделать корневой узел.

    Задачи:

    1. до 100Мб поток Ethernet (UDP)

    2. 16 последовательных каналов со скоростью до 3-5 Мбод каждый

     

    В какую сторону смотреть?

  12. Спасибо всем за ответы.

    Варианты значит такие:

    1. FPGA c загруженым ядром+ там же формирование внешних последовательных интерфейсов

    2. CPU с Ethernet 100 + (маленькая FPGA)/CPLD

     

    А какого уровня FPGA смотреть/пробовать? (уже не та ветка форума похоже)

  13. Что это по вашему не тянут? и 100Мб это скорость или объём? Скорость не та? Потеря пакетов? Младший это 107 как я понимаю. И какой Phy используете?

     

    100Мб - это поток(вероятно UDP пакеты), реально будет меньше ~30-50Мбод, но запас это хорошо. Суть девайса парсить этот поток и выплевывать информацию в 16 последовательных интерфейсов ~3-5Мбод.

     

    По ощущениям stm32 f107 не успеет. Может стоит смотреть в сторону Cortex M4?

    Интересует ваш опыт работы с загруженным Ethernet 100.

     

    Непонятно зачем конкретизировать физ. уровень, я пока выбираю контроллер.

     

  14. Понадобилось прогонять через систему 100Мб, видимо UDP пакетами.

    От контроллера нужно лишь наличие мощи, чтоб переваривать 100Мб и отправлять в некий другой интерфейс.

     

    Чем иp ARM минимально можно обойтись?

    Работал тока с младшими stm32 и аналогичными LPC, они явно не тянут.

  15. Предполагается построение следующей системы:

    Сеть типа "звезда"(далее корневой узел и оконечники(16 штук)). Внутри нее требуется постоянная передача ~20-30Мбод.

    Корневой узел имеет внешний выход Ethernet 100, он осуществляет только транзакции Ethernet<->внутренняя сеть, может незначительные вычисления.

    Узлы имеют N ADC + параллельные шины управления.

    Максимальное расстояние в сети 1 метр.

    Пока видится реализация оконечника как CPLD(MAX V) + ADC, а корневого узла как МК(с поддержкой Ethernet 100) + CPLD ( симметричность внутренней сети).

    Внутренняя сеть LVDS.

     

    Жизнеспособна ли концепция?

    Как ведет себя LVDS при ВЧ помехах?

    Использовал ли кто нибудь LVDS для связи многих точек?

     

  16. Задача: прикрутить spi флешку к контроллеру STM32f105, хотя контроллер в данном случае не важен. При этом устройство должнобыть для компа как флешка.

    Использую RL_ARM без RTX.

    Получается на FlashFS работать с флешкой и USB_MSC пашет, но поотдельности.

    У Keil, есть статейка

    Using FlashFS with USB Devices

    И там все отлично работает, т.к., RL_ARM заточен на сопряжение FlashFS + USB_MSC + Memory Card drive.

    А вот с SPI Flash Drive не дружен, т.к. нет функций для работы FAT.

     

    Подскажите как ему подпихнуть эти функции?

    Или SPI Flash притвориться SPI Memory Card и переписать ее функции?

     

    Или есть чего попроще?

     

    Нашел аналогичный вопрос keil forum1, Keil forum2. Может, то чего я хочу в принципе нереализуемо?

  17. Здравствуйте.

    Есть желание отправлять с телефона по bluetooth простые команды на перефирию, типм вкл/выкл. А вопрос следующий, есть ли такой профиль во всех телефонах или хотя б в большинстве.

    В идеале хотелось бы упралять вовсе без дополнительного ПО на мобиле, т.к. на сколько я понимаю добраться из явы до блютус тоже не стандарт, а писать под разные операционки напряжно. Это реализуемо?

  18. Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk. Переходник USB2.0 - RS232 (COM) VE024 имеет именно такую конфигурацию эндпоинтов. И работает.

    Вообщем использовал самый простой вариант, т.е. Virt COM = 1 in bulk + 1 out bulk. Причем InterruptIn не убрал из описания, а просто посадил на несуществующую конечную точку. Все пашет ОК.

    Всем спасибо, хоть дискусия ушла к vid|pid=)

  19. Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk. Переходник USB2.0 - RS232 (COM) VE024 имеет именно такую конфигурацию эндпоинтов. И работает.

     

    а можно дескриптор?

     

    HID устройства могут не иметь EP кроме 0-й. Я так делал, всё отлично работает. Но я использовал только запросы GET/SET Feature. Но интеррупт канал, по идее, должен работать через EP0. Для этого всё предусмотрено. Там просто будет запрос от интерфейса с соотв-м номером. Просто нужно на него ответить и всё.

    Проверить легко - не описывать HID-овские EP и посмотреть запросы сниффером.

    Пока запасной вариант, попробую.

  20. Собственно на LPC1343 реализованно composite device. Все получается, но! нехватает конечных точек. Вычитал, что можно как то подцепиться к 0й endpoint. Как? Подскажите где копать, пожалуйста.

    Дальше вопрос, сможет ли в таком случае соответствующий интерфейс стать стандартным (kbd, mouse) ?

     

    Конкретезирую. У меня composite: mouse+kbd+Virtual COM.

     

    mouse 1 endpoint interrupt in

    kbd 1 endpoint interrupt in

    Virt COM 3: 1 in interrupt + 1 in bulk + 1 out bulk

     

    тем временем в контроллере:

    0 0 Control Out 64 No

    0 1 Control In 64 No

    1 2 Interrupt/Bulk Out 64 No

    1 3 Interrupt/Bulk In 64 No

    2 4 Interrupt/Bulk Out 64 No

    2 5 Interrupt/Bulk In 64 No

    3 6 Interrupt/Bulk Out 64 Yes

    3 7 Interrupt/Bulk In 64 Yes

    4 8 Isochronous Out 512 Yes

    4 9 Isochronous In 512 Yes

     

    Проблема в том что 4ая endpoint Isochronous и её никуда не подсунишь. А влезть как то нужно. КАК?

     

    Увидел что вроди как CDC можно и через Isochronous делать. Пока ковыряю в эту сторону

     

  21. Спасибо за подсказки, совладал с этой библиотекой.

    В голове уперто сидела идея, что все должно быть доступно прям из препроцессора, ан нет.

    Забыл отписаться по результатам, мало ли кому понадобится.

    Примеры от ST рабочии, но нужно заточить под свой кварц, если он у вас оригинальный.

     

    Например чуть подправить ф-цию SetSysClockTo в system_stm32f10x.c под себя. И заставить юзать именно наш вариант.

    static void SetSysClockToHSE8(void)
    {
     __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
    
     /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
     /* Enable HSE */    
     RCC->CR |= ((uint32_t)RCC_CR_HSEON);
    
     /* Wait till HSE is ready and if Time out is reached exit */
     do
     {
       HSEStatus = RCC->CR & RCC_CR_HSERDY;
       StartUpCounter++;  
     } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
    
     if ((RCC->CR & RCC_CR_HSERDY) != RESET)
     {
       HSEStatus = (uint32_t)0x01;
     }
     else
     {
       HSEStatus = (uint32_t)0x00;
     }  
    
     if (HSEStatus == (uint32_t)0x01)
     {
       /* Enable Prefetch Buffer */
       FLASH->ACR |= FLASH_ACR_PRFTBE;
    
       /* Flash 2 wait state */
       FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
       FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    
    
    
       /* HCLK = SYSCLK */
       RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
    
       /* PCLK2 = HCLK */
       RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
       /* PCLK1 = HCLK */
       RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
    
       RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                                 RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); 
    
       /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ 
       RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
       RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
                               RCC_CFGR_PLLMULL9); 
    
       /* Enable PLL */
       RCC->CR |= RCC_CR_PLLON;
    
       /* Wait till PLL is ready */
       while((RCC->CR & RCC_CR_PLLRDY) == 0)
       {
       }
    
       /* Select PLL as system clock source */
       RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
       RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    
    
       /* Wait till PLL is used as system clock source */
       while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
       {
       }
     }
     else
     { /* If HSE fails to start-up, the application will have wrong clock 
            configuration. User can add here some code to deal with this error */
     }
    }

  22. Спасибо за ответ.

    За неимением альтернатив (не нашел по крайней мере), уже ковыряюсь в этой библиотеке.

    И есть проблема. У меня на макетке кварц 8Мгц + 32Мгц под юсб.

    Если залить пример из библиотеки возникает ошибка нумерации по юсб.

    пример пользую под STM3210C-EVAL, т.е. как раз под stm32f105.

    на ките к которому пример кварц 25мгц.

    Пытаюсь править под свой кварц:

    1. препроцессору добавил, теперь он такой

    STM32F10X_CL,USE_STDPERIPH_DRIVER, USE_STM3210C_EVAL, HSE_VALUE=8000000

    2. system_stm32f10x.c теперь рабочий дефайн: (чтоб работал параметр препроцессора )

    #define SYSCLK_FREQ_HSE HSE_VALUE

     

    Больше ума не приложу что пробовать, буду благодарен за идеи.

×
×
  • Создать...