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

Не надо.

Спасибо!

Хотя в некоторых схемах для защиты используется блок диодов (U4 на схеме):

post-19695-1245834143_thumb.png

 

От него также придётся отказаться, в случае self-powered девайса... :(

 

ЗЫ: а-а, так ведь изначально на пинах D+\- нет напряжения? Шина в состоянии сброса?

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


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

От него также придётся отказаться, в случае self-powered девайса...

 

Можно не отказываться, а использовать USB-шные 5V вместо 3.3. Вообще-то эта хрень нужна только для прохождения тестов, а по жизни - вполне можно и без нее (я использую...).

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


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

Подскажите, пожалуйста, насчёт двойной буферизации USB конечных точек для STM32.

Мануал по этому поводу (RM0008, последняя июньская версия) пестрит ошибками и отсутствующей информацией.

 

Например, не указано, где именно находятся регистры указателей на буфера - ADDRn_TX_0, ADDRn_TX_1, ADDRn_RX_0, ADDRn_RX_1.

Также мануал утверждает, что счётчики количества данных COUNTn_TX_0 и COUNTn_TX_1 находятся в одном 32-ух битном регистре, тогда как библиотека STM32_USB-FS-Device_Lib_V3.0.1 юзает два разных 16-ти битных регистра...

 

И ещё - как правильно переключать буфера с одного на другой? Достаточно ли просто переключить бит DTOG или надо ещё и статус EP поставить в VALID?

 

Может, есть какие-то примеры реализации bulk double buffering endpoints?

 

Не понял про STALL для буферизованных EP, вычитал в UM0424 User manual:

Double buffer STATUS

The simple and double buffer modes use the same functions to manage the

Endpoint STATUS except for the STALL status for double buffer mode. This

functionality is managed by the function: SetDouBleBuffEPStall();

Вот код:

void SetDouBleBuffEPStall(uint8_t bEpNum, uint8_t bDir)
{
  uint16_t Endpoint_DTOG_Status;
  Endpoint_DTOG_Status = GetENDPOINT(bEpNum);
  if (bDir == EP_DBUF_OUT)
  { /* OUT double buffered endpoint */
    _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPRX_DTOG1);
  }
  else if (bDir == EP_DBUF_IN)
  { /* IN double buffered endpoint */
    _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPTX_DTOG1);
  }
}

Как видно, от обычной функции установки статуса она отличается отсутствием маскирования toggle битов, в результате чего все они будут сброшены.

И что, в этом был весь сокровенный смысл этой "необычной" функции??

 

Причём в референсном мануале про отличия установки STALL между буферизованными и нет bulk EP нет вообще ничего!

:rolleyes:

 

Из-за отсутствия этой информации у меня возникают нехорошие сомнения в качестве кода USB библиотеки для STM32.

 

К примеру, вышеприведённый код пытается установить два бита статуса в состояние STALL (01) путём сброса только одного бита.

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

А если статус был NAK (10), то вместо STALL получится DISABLED (00). :(

 

Блин, запарили эти индейцы своими библиотеками.

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

 

ЗЫ: форум на st.com вообще умер, ответа от спецов не дождёшься, одни только вопросы...

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


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

Вроде разобрался немного с двойной буферизацией EP.

Пришлось смотреть, как всё это работает по коду USB библиотеки от ST, так как мануал действительно откровенно врёт и недоговаривает по поводу размещения регистров буферов.

 

Скоро доделаю свой Mass Storage девайс (на SD карте в режиме SPI и Full Speed обмен c PC).

Со скоростями в режиме чтения прикольно получается.

Сначала было около 520 KB\sec (последовательное чтение - получили запрос - прочитали - отдали данные).

Потом 820 KB\sec (параллельное считывание с карты во время передачи данных из буфера).

С добавлением двойной буферизации стало ~950 KB\sec.

 

Интересно, это потолок для Full Speed, или можно ещё быстрее сделать на STM32?

Вроде теоретический потолок ~1200 KB\sec, но ведь MSC протоколу ещё надо команды и ответ на них передавать...

 

С другой стороны, может "притормаживать" и карта памяти (SPI), хотя в режиме непрерывного чтения она способна отдавать ~1300 KB\sec данных...

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


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

Поднял частоту SPI, на котором сидит карта памяти, до 18 МГц.

Результаты те же - чтение до 950 килобайт\сек., запись - до 800 к\сек.

Видимо, уже упёрся в USB...

Ладно, заоблачных скоростей от FS явно не получить, да и не надо пока...

 

Что прикольно - увеличение размера внутреннего буфера чтения\записи приводит к росту скорости записи, а скорось чтения наоборот, незначительно падает :laughing:

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


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

TE-STM32F103RE - «Махаон» вопрос по работе с SDIO

 

Работаю с этим модулем вторую неделю, пробовал примеры из

STM32F10xFWLib - V2.0.3 Patch1 c MT-Link-6 JTAG/SWD.

(Boot в соответствии с RM0008 - Reference manual rev.9 стр.48)

 

Интересует работа модуля SDIO с FWLib от ST.

Я немного доработал main.c для определения наличия карты и подачи питания + индикация светодиодами о результатах теста microSD.

С картами не SDHC проблем нет, но с SDHC (Kingston microSD 4 и 8 Gb)

библиотечная софтина работает нормально только при подключенном JTAG или

SWD из под IAR 5.3 (boot - Main Flash memory, SDIO_BusWide_4b).

По сбросу (без JTAG или SWD) тест проходит только с картами не SDHC типа.

 

На http://www.terraelectronica.ru/board/index...hl=te-stm32f103 пока вопрос не решён.

На буржуйском ST форуме поднималась похожая проблема но там обходились с SDIO_BusWide_1b.

 

Может кто нибудь повторить пример на терровской или другой плате с SDIO_BusWide_4b

(STM32F10xFWLib - V2.0.3 with Patch1\FWLib\examples\SDIO) для SDHC и сообщить о результатах?

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


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

Кому-нибудь попадались ссылки на дешевые демоплаты STM32 с интегрированными силовыми цепями для управления моторами? Интересуют как щеточные, так и безщеточные и АС сервы.

Что то по типу линейки Luminary http://www.luminarymicro.com/products/rdk_bldc.html и http://www.luminarymicro.com/products/rdk_bdc.html. Кстати, никто не знает случайно в каком формате luminary дает проекты своих плат? А то схема в Альтиуме отдается свободно, а файл с расширением pcb открыть невозможно. Чтобы не было оффтопом- хотел использовать проекты luminary в качестве "рыбы" для STM32.

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


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

2_alexvm

 

у меня махаон заработал в 4битном режиме SDIO

флешка Transcent 4Gb MMAGRO4GUDCA-DB, 6 класс, SDHC

 

скорость 1 мегабайт запись, >5 чтение. если померил правильно ( 1 гиг зщаписи чтения мерял на время) .

исходник из FirmWare не заработал сразу.

косяк с таймером SDIO был. зависало нафиг все.

тоже добавил детектирование карты.

 

 

вопрос зЮбрам :)

 

нашел косяг в GCC для Corterx'ов

не вдаваясь в подробности ситуация такая что вижу косяг но не могу понять как исправить. я думал что знаю как работают инструкции ITxxx COND

 

оказалось не понимаю.. :(

 

в доке написано что суфикс IT определяем исполнятся или нет инструкции соответствующей суфиксу в соответствии с COND условием.

если условие не выполнено то просто проталкивается NOP и типа это дает фиксирование время прохода и линию на конвеере.

но... сами иструкции условные сами по себе. и ъто можно суфиксами инструкций сделать тоже самое (кстате компиллер их всерано требует для блока IT)

они также в NOP превращаются

а где сокровенный смысл и разница?

 

оъясните. туплю .....устал топорщить мозговоую кость.

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


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

Дело в том, что инструкции THUMB2, в отличие от ARM, не могут быть условными.

То есть могут, но не все.

Эта фича (IT) позволяет абсолютно все инструкции юзать как условные.

По крайней мере я так понимаю.

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


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

TE-STM32F103RE - «Махаон» работа с SDIO.

Проблема в работе с некоторыми SDНС картами оказалась в несоблюдении

в данной версии_1.00 платы SD Memory Card Hardware Interface

(отсутствуют 5 подтягивающих резисторов).

В STM3210E-EVAL evaluation board (UM0488) на SDIO они установлены (и на SWJ тоже).

 

Про Hi-Z state: ST - RM0008, Rev 9, стр.464-467.

(If the CPSM is not in the Send state, the SDIO_CMD output is in the Hi-Z state,

as shown in Figure 187 on page 464.

Idle: the data path is inactive, and the SDIO_D[7:0] outputs are in Hi-Z.)

Для поддержания Hi-Z состояния выводы порта должны быть сконфигурированны в Open Drain Mode,

и тогда наличие подтягивающих резисторов на линии передачи оправдано,

но в данном случае все выводы SDIO сконфигурированны в FWLib в Push-Pull Mode (кроме SDCard_Detect)

и в процессе работы конфигурация не меняется, т.е. вроде никакого Hi-Z state быть

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

Однако добавление 5 подтягивающих резисторов решает проблему работы с некоторыми SDHC картами.

 

Причём в режиме отладки c SWJ-DP всё работало и без этих резисторов, поэтому пришлось вылавливать косяки

через HyperTerminal.

Без подтягивающих резисторов карта сначала не проходила инициализацию в SD_PowerON() - вываливалась с

SD_COM_CRC_FAILED после CMD55 (добавление повторов команды эту проблему решало),

но дальше всё висло в SD_EnableWideBusOperation(SDIO_BusWide_4b)--> SDEnWideBus(ENABLE)-->

FindSCR(RCA, scr)--> в цикле:

while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)))
  {
    if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET)
    {
      *(tempscr + index) = SDIO_ReadData();
      index++;
    }
  }

Вариации на тему изменения рабочей частоты, фазы синхронизации, TIMEOUT и SDIO_Wait результата не давали.

 

Ниже приведён пример листинга HyperTerminal рабочей программы SDIO для терровского махаона

и файл main.c который можно установить взамен библиотечного из FWLib-V2.0.3.

(в файле sdcard.c в cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024; убрать *1024, чтобы не было переполнения)

В опциях препроцессора указать EMB_FLASH взамен VECT_TAB_FLASH для загрузки во flash.

 

main.rar

 

SDIO DEBUG:

 

SD Init

SD_GetCardInfo:

CardType = SDIO_HIGH_CAPACITY_SD_CARD

CSD Version 2.0

CardCapacity = 7600 Mb

CardBlockSize = 512 byte

CardComdClasses = 5

MaxBusClkFrec = 25 MHz

 

SD SelectDeselect

EnableWideBusOperation

Erase

Set Transfer Mode

ReadMultiBlocks

Compare the buffer with zero

Write block of 512 bytes on address 0

Read block of 512 bytes from address 0

Check the correctness of written data

TransferStatus1 = 1

Write multiple block of many bytes on address 0

Read block of many bytes from address 0

Check the correctness of written data

TransferStatus2 = 1

Status = 42_SD_OK

 

Остаётся однако совершенно непонятным вопрос - почему без подтягивающих резисторов на SDIO

в режиме отладки из под IAR_5.3 всё выполнялось отлично и по шагам и в реалтайме..... :wacko:

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


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

Недавно купили кит EKI-LM3S6965 Ethernet Evaluation Kit for IAR Embedded Workbench

от Stellaris

так вот на нем интегрирован JTAG в виде FTDI2232C, и есть фича при удерживании reset при включекнии он может работать наружу, пробовал подключать его к ARM7 но IAR пишет что LMFTDI поддерживает только Cortex-M3, похоже можно любой cortex подключить

 

Извиняюсь, что немного не по теме --- есть плата с LP2478, которую надо отлаживать и есть плата EKI-LM3S1968 c

вышеупомянутой отладкой -- так вот-- есть ли вариант их подружить?

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


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

Проверил сейчас работу SDIO c DosFS на махаоне SDIO_DosFS_V02 - вроде всё пашет и с SDHC :)

Но как то больше efsl + SPI раньше использовал.

А делал ли кто-нибудь порт ST_SDIO под efsl или fatfs?

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


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

Проверил сейчас работу SDIO c DosFS на махаоне SDIO_DosFS_V02 - вроде всё пашет и с SDHC :)

Но как то больше efsl + SPI раньше использовал.

А делал ли кто-нибудь порт ST_SDIO под efsl или fatfs?

 

у меня fatfs на SDHC c махаоном работает.

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


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

Приветствую!

Программлю SPI на STM32F103RBT6. До этого сделал SPI в режиме SLAVE через прерывания, все работало прекрасно. Решил переключить в MASTER, так как только NVIC настраиваю, так он падает в SPI прерывание и там и остается на всю оставшуюся жисть до ресета. Причем в прерывании выставленны как RX так и TX флаги, типа он и принял чего то и послал чего то.

Пины все выставил вроде как правильно. NSS пин выставил в Софт-режим. На сам пин вроде вывел 1.

 

По идее, проц даже и не должен попадать в прерывание, как только проинициализируешь СПИ переферию.

А он даже не вылазит от туда.

 

Ни у кого такого не было случаем?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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