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

Flexz

Свой
  • Постов

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

  • Посещение

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


  1. т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);

    Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.

  2. ЕМНИП Актель бесплатно предоставляет ядро 51 проца, а так же периферийные модули, плюс вменяемый графический редактор, что бы все это собрать в кучу. Но бортовой ПЗУ-шки тут нет, разве что на регистрах ее сделать (их можно инициализировать в заданное значение), но это имхо извращение уже, да и много не сделать.

    Если вам нужен именно RT, то по информации от представителя Актель - Smartfusion2 в перспективе будет переведен в эту категорию.

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

    Обычно на случай пересечения на микросхемах делают 1-2 пина, которые задают младшие биты адреса. Либо делают несколько исполнений, отличающихся только адресом.

  4. DCMI лучший вариант, полностью аппаратный прием.

    На голом GPIO возможен такой вариант: читаем порт с данными и сигналом синхронизации с максимально-возможной частотой(ЕМИП с использованием DMA в режиме M2M - такта 4 на сэмпл уходит), после разбираем сигнал, выделяя синхронизацию вручную.

    Если не жалко еще таймер отдать под сие дело - сигнал синхронизации заводим на Input capture, от Input Capure толкаем DMA который читает порт.

  5. А его и не надо инициализировать для USB отдельно, он сам себе шибко умный. Если посмотреть таблицу альтернативных функций пинов, то PA9 для USB вообще не значится.

     

    Удостоверьтесь что в USB контроллере выключен Vbus sensing. Если используете стандартную библиотеку, то в usb_conf.h нужно закомментировать строчку #define VBUS_SENSING_ENABLED

  6. Настройте таймер с периодом 1 в режиме Slave Gated Mode, прерывание от внешнего девайса заведите на External Trigger Input этого таймера. Прерывание от переполнения таймера и будет тем что вам требуется.

    Как-то так.

  7. Отсюда следует вывод - для передачи данных из вашего, пользовательского кода предусмотрена другая функция.

    Не предусмотрена. Этот пример - банальный переходник USB-UART. Указанная функция вызывается из прерывания по RXNE и берет данные из UART, что бы передавать ей свои данные ее нужно слегка переписать.

  8. В файле usbd_cdc_vcp.c функция VCP_DataTx определена как static. Поэтому ее нельзя использовать в другом модуле, уберите static в объявлении и тогда можно будет подцепить ее в другом модуле.

  9. А если в обычном режиме - с одним АЦП, нормально работает?

     

    Еще один момент, который к делу скорее всего не относится, но все же стоит включить для DMA FIFO и пакетную передачу в память. Мне довелось как-то нарваться на редкое переполнение в АЦП, работающем с максимальной скоростью.

  10. USB-USB на STM32F1 не получиться. У него только один интерфейс USB, и тот только Device.

    Если брать stm-ку, то начиная с F2 - у этих два USB, в т.ч. хост и с примерами все в порядке.

     

    Непосредственно по задаче, первое что приходит в голову - это тансляция запросов с хоста на девайс (т.е. с компа на флешку) на уровне, например, scsi команд, плюс встраивание своих запросов. И оно даже наверное будет работать, и даже почти всегда. Проблема возникнет в тот момент, когда и комп и сам девайс захотят записать что-то в один и тот же сектор, в таблице фат, например.

     

    Вообще задача видится довольно нетривиальной, имхо решением будет отказаться от файловой системы на флешке и работать с ней с компа как с RAW диском.

    Вспомните телефоны, при подключении к компу в режиме диска (для доступа к SD-шке) сам телефон теряет к ней доступ, так что даже для "взрослых" девайсов это не так просто.

  11. А я то тут причем. Вопрос был быть или не быть! Ответ: - пациен скорее жив, чем мертв. Про подробный диагноз пациент не спрашивал. :)

    Да и все давно нарисовано. Берем схему кейловского демо борда с PHY и смотрим как там все тактируется. Там можно выбирать варианты тактирования.

    Тот пациент ответ давно получил. Теперь я - пациент, и вот уже который день топаю ногами и требуют подробный диагноз :)

    В кейловской плате PHY тактируется с внешнего генератора 50МГц - никакого выбора нет. На STшной плате действительно можно выбрать MCO как источник, но там подается с MCO только 25MHz для MII. Для RMII написано буквально следующее:

    RMII mode configuration(*)

    (*) User have to provide the 50 MHz clock by soldering a 50 MHz oscillator (ref SM7745HEV-50.0M or

    equivalent) on the U3 footprint located under CN3 and also removing jumper on JP5. This oscillator

    is not provided with the board.

    Мне действительно очень интересно узнать, как можно удовлетворить потребность PHY в 50 мегагерцах не задействуя ни доп. генератор, ни вторую PLL.

  12. А почему нет? Типовая схема включения DP-шки - 50МГц генератор заведенный как на вход RMII_REF_CLK проца, так и на тактовый вход DP-шки. RMII интерфейс процессора работает в своем частотном домене (этом самом 50МГц), в нем же работает RMII интерфейс PHY. Связь с частотынм доменом AHB (на который накладывается только одно ограничение - не менее 25МГц) и проца в целом - забота MAC, где-то внутри него должны быть FIFO для пересечения разных частотных доменов, аналогично внутри PHY.

    При таком раскладе нет разницы, берутся эти 50МГц с генератора или с ножки процессора.

     

    С процессора 50МГц можно сформировать как я писал выше - используя для HSE кврац кратный 1МГц и задействовав вторую PLL. Видимо можно как-то еще, оттолкнувшись именно от 25МГц кварца, как пишет vlad_new, но детали от не раскрывает :)

  13. А с чего Вы решили, что надо умножать. Там делить надо либо на 2 либо на 4.

    Потому что для DP83848 нужно 50МГц на вход.

    Вы что-то знаете, чего не знаю я, но говорить явно нехотите. Можете все-таки раскроете тайну?

  14. Не понятно что Вы этим хотели сказать. USB 48 мгц есть, В STM есть лапка, которая может программироваться на вывод частоты генератора. Используя кварц в 25 мгц можем запрограммировать ее на 25 или 50 мГц. Как раз под MII или RMII. У меня так все и работает. А про 168Мгц. это Вы придумали. Автор темы про это не писал. Что не так ?

    Да, мне тоже не понятно, что вы хотите сказать :) Ткните меня носом в функцию удвоения HSE для вывода на MCO, в упор не вижу такого. Поделить можно, это да.

    Или вы предлагаете использовать вторую PLL, ту что I2S? Так для нее тоже 25МГц не нужно, т.к. формула генератора частоты имеет вид HSE / PLL_M * PLLI2S_N / PLLI2S_Q, где при HSE=25, имеем M=25,N=200,Q=4. Т.е. для получения 50МГц на MCO нужен любой кратный 1МГц кварц.

    Дальше ТС писал про подачу 50МГц с таймера. Надеюсь не нужно объяснять вам разницу между МСО и таймером? Попробуйте сгенерить 48МГц для USB и при этом получить с таймера 50МГц.

     

    И, как сказали выше, errata пишет нам для F2

    When the clock source output by the microcontroller on the MCO pin is issued from the PLL,

    the MCO pin cannot be used to deliver a 50 MHz RMII clock input or a 25 MHz MII clock

    input to the ethernet PHY compliant with the long term jitter maximum value for 1.4 ns

    specified in the IEEE802.3 standard.

    для F4, правда, этого уже нет.

     

    Вот только, насколько я понял, вопрос был совсем в другом. На PHY идут 50МГц, взять их можно с внешнего генератора, и эти же 50МГц нужно подать на вход REF_CLK процессора. ТСа смутило то, что процессор вроде как должен работать внутри на этих 50МГц, а это не так, согласованием частот занимается контроллер Ethernet, процессор может работать на любой удобной частоте.

  15. Для этого ее необходимо тактировать от 50мгц клока и я так понимаю процессор тоже должен его получать, если верить ДШ.

    Получать на вход REF_CLK, правильно, но где написано, что ядро и внутренние шины процессора должны работать от этой частоты? Даташит оговаривает только ограничение на минимальную частоту AHB - 25МГц

     

    Единственный вариант, который приходит в голову тактировать от таймера встроенного в процессор.

    И как вы собираетесь при частоте таймера, скажем 168 МГц получить ровные 50МГц на выходе?

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