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

USB билиотека с разными классами девайсов и хостов есть у STM32, применял неоднократно, очень доволен. Тем более USB 2 штуки, есть пример когда один работает девайсом, другой - хостом. Под проекты могут давать бесплатные VID/PID номера.

SPI у STM32F2 до 30М, у STM32F4 до 40М.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько просто/сложно будет реализовать поддержку USB (HOST), у кого больше ресурсов для этого?

 

Может кто слышал про 18Х серию NXP с 1МБ флешкой на борту - когда предположительно появятся?

А что на сайте нет документации про 18Х серию NXP?

Ну у меня получилось реализовать под LPC17xx USB HOST, у STM тоже есть реализация. А насколько она круче не могу сказать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишу на LPC17xx, по сравнению с STM32 (который только изучаю) мне кажется LPC лучше с примерами,несложная, но продуманная архитектура периферии, на LPC17xx USB и ETHERNET использовал, все хорошо работает. Насчет архитектуры периферии на LPC сразу обратил внимание на нормальное описание и не замудренный код в примерах. От STM32 пока не могу отойти от шока взглянув на поддержку USB и ETHERNET, такое впечатление как будто там Страуструп работает главным куда пошлют. Точнее, не код а напрасный труд, анти-помехозащищенный код, в структурах вместо обычных данных присутствуют указатели на функции которые возвращают эти данные ну и т.д. , гибкости этого решения - никакого, а время выполнения кода в несколько раз возрастает, попутно архитектура периферийных регистров говорит то, что разрабатывал ее человек отдаленно имеющем представление о программировании и алгоритмах оптимизации быстродействия, мож и имеет, но все-таки отдаленое, непонятная экономия пространства адресов против быстродействия программной обработки периферии.

Об LPC - глюков не обнаружил, регистровая архитектура периферии отличная и удобная (работал с ADC,DAC,TIMER,USB,ETHERNET,GPIO,UART), об поддержке USB (классовые драйверы не использовал) использовал сырой endpoint режим. Единственное что огорчило что в таймерах для дополнительного использования в качестве Single Mode PWM на старших моделях LPC убран регистр PWMCON, оставлен только регистр полупрограмной реализации PWM - регистр EMR, причем позже как-раз этот режим и пригодился для алгоритма генерации серии двухтактовых импульсов для тестовой модели трансформаторного блока питания.

Об STM32 - в процессе изучения,периодичное чтение и изучение возможностей периферийных блоков по мануалу, привело к тому что я по сей день кроме блока GPIO пока ничего не использовал. Использовать программную поддержку эстеэмовского местного "Страуструпа" извините тоже не вариант, ничего универсального не бывает, банальные примеры работают, а возится с переделыванием или адаптацией примеров - неблагодарное и никчемное дело. По программной архитектуре реализации кода поддержки, действительно потрачено столько сил на так сказать универсонализацию кода, что в итоге привело к плохой помехозащищености и очень длительному времени выполнения и растрате оперативной памяти на сохранения непонятно зачем созданных периферийных структур, возможно это как раз выход с положения из-за неудачной регистровой реализации периферии.

Изменено пользователем Max_Shaman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

привело к тому что я по сей день кроме блока GPIO пока ничего не использовал. Использовать программную поддержку эстеэмовского местного "Страуструпа" извините тоже не вариант, ничего универсального не бывает, банальные примеры

Там не просто "труп страуса", там достаточно хорошо забагованный труп. Пишу сейчас свой MSD для UDEV (универсальный, ессно, от архитектуры не зависит - пойдет на любом процессоре). Подглядываю в файлы примера от STM, вот весьма милый кусочек:

  
if ((USBD_GetRxCount (pdev ,MSC_OUT_EP) != BOT_CBW_LENGTH) ||
     (MSC_BOT_cbw.dSignature != BOT_CBW_SIGNATURE)||
       (MSC_BOT_cbw.bLUN > 1) || 
         (MSC_BOT_cbw.bCBLength < 1) || 
           (MSC_BOT_cbw.bCBLength > 16))
 {

   SCSI_SenseCode(MSC_BOT_cbw.bLUN, 
                  ILLEGAL_REQUEST, 
                  INVALID_CDB);
    MSC_BOT_Status = BOT_STATE_ERROR;   
   MSC_BOT_Abort(pdev);

 }

Проверяет поле MSC_BOT_cbw.bLUN, и если оно неверное то тут же использует его как аргумент SCSI_SenseCode() для записи статуса :biggrin:. И похожих косячков есть еще. Код взят из свежей "STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library".

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохой пример, SCSI_SenseCode не использует переменную lun :) плохой код - да, но еще не баг

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохой пример, SCSI_SenseCode не использует переменную lun :) плохой код - да, но еще не баг

Согласен, не использует. Но все равно достаточно коряво и этот весь код к "многолуновому" варианту привести будет достаточно тяжко (а я как раз многолуновый пишу). А тут какая прелесть:

const int8_t  STORAGE_Inquirydata[] = {//36
   /* LUN 0 */
 0x00,		
 0x80,		
 0x02,		
 0x02,
 (USBD_STD_INQUIRY_LENGTH - 5),
 0x00,
 0x00,	
 0x00,
 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
 'P', 'r', 'o', 'd', 'u', 't', ' ', ' ', /* Product      : 16 Bytes */
 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
 '0', '.', '0' ,'1',                     /* Version      : 4 Bytes */
}; 

Там разве не USBD_STD_INQUIRY_LENGTH - 4 должно быть согласно SCSI стандарта?

А "Produt" - это новая торговая марка от STM? :biggrin:

Оно вроде как и не фатально (работает же как-то), но достаточно неопрятно. Еще во многих местах смешивает уровни SCSI и BOT, например нужно phase error для BOT генерить, а оно ILLEGAL_REQUEST в sense data валит. Вот и получается, народ "мимодумно бросает апельсин в воду" (с) и потом начинаются крики - "процессор - фуфло, USB - очень ненадежный интерфейс".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишу на LPC17xx, по сравнению с STM32 (который только изучаю) мне кажется LPC лучше с примерами,несложная, но продуманная архитектура периферии

Тут, наверное, вряд ли кто с Вами будет спорить. У них действительно примеры написаны просто и достаточно полно ...

попутно архитектура периферийных регистров говорит то, что разрабатывал ее человек отдаленно имеющем представление о программировании и алгоритмах оптимизации быстродействия

Честно говоря, этого выссказывания я не понял. Регистры у STM - просто регистры. Наверное Вы о библиотеке? Так плюньте на неё ... Раньше как-то обходились и без этого ...

Об LPC - глюков не обнаружил, регистровая архитектура периферии отличная и удобная ....

Об STM32 - в процессе изучения,периодичное чтение и изучение возможностей периферийных блоков по мануалу, привело к тому что я по сей день кроме блока GPIO пока ничего не использовал.

Периферийные модули у STM значительно более навороченные, чем у LPC. И здесь возникает определённая колизия. Некоторые фичи самому раскопать достаточно затруднительно. Надо чтобы кто-нибудь тренинги проводил, либо примеры применения конкретные ... Иначе эти идеи останутся невостребованными, так как в даташите невозможно написать задумку автора - разработчика ...

Ну например, в некоторых stm есть 3 АЦП. Приятно узнать, что они сидят на одних и тех же ножках. Первая мысль - раздражение. Начинаешь читать - есть возможность синхронизации и фазового сдвига м/у запусками. Иными словами, можно поднять частоту сэмплирования сигнала в 3 раза. Ну да ... мне это не надо... Но раз разрабатывалось - кому-то нужно. Это одна маленькая фича, а их море. В результате сложность модуля возрастает очень сильно и работать с ним становится сложнее. Но в целом всё не так плохо. В одном проекте мне потребовалось определить скважность импульсов ШИМ. STM это делает аппаратно.

К сожалению, думаю, что я узнаю по даташиту лишь десятую долю заложенных возможностей. Даже простых узлов. А за сложные я уже и не говорю.

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

Мне, конечно, тоже предстоит самому работать с Ethernet. И тут конечно, придётся повоевать. Тем не менее, если народ готов пойти на жертвы ( например пост VslavX) и переписать начисто USB либо Ethernet, то это как раз говорит в пользу продукта. Это говорит о том, что разработчики в него поверили, и готовы потратить значительное время... Это значит, что они признали, что этот продукт надолго ... В него стоит вкладываться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

ИМХО, вкладываться надо не в конкретный продукт, а в повторное использование своего кода - нарабатывать кубики "софтового конструктора". Тогда будет почти все равно какой контроллер использовать. Например, в TCP/IP стеке, архитектурно-зависимая часть общая для, допустим, Cortex-M3, занимает менее 0,1 процента. Контроллерно-зависимая часть, допустим, для STM32F2xx занимает 2-3 процента. Аналогично для стека USB-device. Для USB-host цифры еще более незначительные. Поэтому при выборе контроллера LPC vs STM уже можно себе позволить посматривать на другие критерии, у меня основной - цена. STM32 на сегодня один из самых недорогих ARM7xxx/Cortex-M3. По сведениям наших снабженцев LPC17/23 значительно проигрывает (говорим про партии 10-20К штук). Ну а все остальные факторы уже вторичны (после 20 лет разработки столько всякого насмотришься) - документация, примеры, качество имеющегося софта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря, этого высказывания я не понял. Регистры у STM - просто регистры.

 

Я имел ввиду у LPC чаще "проскакиваю" в регистровой модели периферии регистры только для сброса битов или установки. Скорее всего вы правы, что я неправ, видимо это у меня нервическое такое раздражение сложилось при чтении STM исходников. Да PWM по входу аппаратный, еще и энкодер квадратурный на половине таймеров присутствует, это хорошо. Но периферия обычных таймеров тоже сложная, но наряду с этим вроде там не хватает вроде для полного счастья регистров сравнения, чтоб можно было вместо Edge( Single PWM mode) или Center-Aligment PWM-ов сделать за период испульса произвольный сигнал, то есть хотелось бы реализовать по два сравнения на канал, одно бы устанавливало, а другое бы сбрасывало уровень, причем желательно чтобы каналов у одного таймера было три таких, соответственно по два регистра сравнения на канал. Я видимо не дочитал мануал, или плохо его перевел, но вроде в таймерах нет возможности создать произвольный PWM сигнал или есть ? У LPC такое делать умеет только PWM модуль который как отдельная периферия стоит и к таймерам LPC не имеет никакого отношения, кроме похожести.

На STM таймерах можно сделать произвольный PWM сигнал по 3 каналам сразу ??? Подскажите пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На STM таймерах можно сделать произвольный PWM сигнал по 3 каналам сразу ??? Подскажите пожалуйста.

Дык там всё стандартное, по 3-м каналам - комплементарный выход с дедтаймом, на одном time-base счетчике :laughing: То, что Вам нужно - нестандарт, его надо готовить из нескольких таймеров. Со всеми сложностями синхронизации. Наверное, за счет RCC- настроил, вырубил клоки, обнулил счетчики, врубил клоки атомарно...и чтоб на одной шине сидели..

Что удивительно - как железо попроще - таких вопросов и возникнуть не может - сразу садишься и пишешь, и получается все,что угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пишу на LPC17xx

Все очень похоже. Начал с LPC ушел на STM...Главная причина в том, что MCU позволяет делать то, что я хочу, а не ОНИ за меня решили... СТМ документация гнусномерзкопрепогано отвратительная и код весьма кривой...У LPC кривизна гораздо глубже и никак с ней не побороться... Но, в конце концов, каждый делает свой выбор.

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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