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

посоветуйте преобразователь USB - I2C

Нашел затык. Слейв чип видимо поджарил пока паял. Другой чип заработал правильно.

Но теперь другая непонятка. Надо ждать прерывание от слейва в отдельном процессе.

Перерыл SDK API, ожидающих функций не нашел, примера кода не нашел.

Подскажите как сделать без постоянного опроса по I2C.

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


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

Если их надо в цикле вычитывать, то это плохая микросхема.

Спросил Silicon Labs суппорт, что они думают по этому вопросу.

Оттуда невнятное "мычание", что в следующем SDK "они попробуют".

Вообще, подход просто супер. Наклепали говна, а как это юзать - мучайтесь сами.

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

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


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

26.03.2021 в 21:17, Gradient сказал:

Надо ждать прерывание от слейва в отдельном процессе.

Именно "процессе" (process) или всё-таки "потоке" (thread)?  Это совершенно разные вещи.

13 минут назад, Gradient сказал:

Если их надо в цикле вычитывать, то это плохая микросхема.

Если разговор про работу из под винды, то в чём проблема завести отдельный поток и опрашивать в нём, в цикле?

Вообще - в по уму построенном приложении, вся работа с реалтайм-периферией должна вестись в отдельных потоках ОС. И тогда нет никакой разницы: поллить всё время блокирующими функциями или ждать события от event-driven API функции.

А работа из GUI-потока с реалтаймовой периферией - это быдлокод.

 

PS: Под виндой вроде памяти и прочих ресурсов - вагон, экономить на спичках смысла нет.

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


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

Из Win Тhread.

>> в чём проблема завести отдельный поток и опрашивать в нём, в цикле?

Интересно, зачем напрягать и замедлять всю систему пользователя, если это элементарно реализуется аппаратно?

Это и есть - быдлокод для быдлочип. ;)

 

 

 

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


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

38 минут назад, Gradient сказал:

Интересно, зачем напрягать и замедлять всю систему пользователя, если это элементарно реализуется аппаратно?

На современных CPU замедление системы от поллинга I2C будет на 0.000...1%. Даже если I2C на 1 МБоде работает.

Хотя конечно - лучше если есть выбор сделать так или эдак.

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


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

Можно говорить что угодно, но вы не понимаете сути.

Вы не ответили, зачем делать заведомо хуже всему миру если сразу можно хорошо?. Заставлять людей реализовывать функцию "через жопу" и тратить на это время. Если сделать правильную реализацию, кстати не нагружающую систему ВООБЩЕ НИКАК, не составляет для производителя чипа НИКАКИХ дополнительных усилий совсем, кроме модернизации драйвера.

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


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

2 часа назад, Gradient сказал:

Заставлять людей реализовывать функцию "через жопу" и тратить на это время.

"Через жопу" - это работать с периферией не в отдельном потоке. Если так не делать, то хоть поллинг, хоть event driven - разницы почти нет.

2 часа назад, Gradient сказал:

зачем делать заведомо хуже всему миру

Вы не задумывались: почему весь этот остальной мир устраивает, а вас - нет?

 

PS: Если вам так не нравится этот чип, то кто заставляет его использовать? Сделайте по-другому.

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


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

>> почему весь этот остальной мир устраивает, а вас - нет?

"Миллионы мух не могут ошибаться" Хех.

Коллега, о вкусах не спорят. Каждый строчит как он хочет.

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

По другому сделать уже не выйдет. Закупили адаптеры с этим трэшем. Я протупил и заранее не проверил как реализован interrupt от слейва. И никак не ожидал такого подобного уровня идиотизма от  Silicon Labs. Но видимо индусы уже и там.

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


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

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

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


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

 

Я сама бывшая гимназистка и тоже хочу сделать свой I2C-USB с эмулятором чипа cp2112. У кого под рукой чип cp2112, пожалуйста, сделайте его дамп одной из утилит, что гугл находит по запросу «HID dump». Или одолжите плату с чипом, если кто есть в Новосибирске.

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


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

5 hours ago, firew0rker said:

cp2112

Мне больше понравился MCP2221. Хотя и CP2112 тоже делал. Но искать надо для дампа.

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


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

On 9/4/2021 at 3:45 PM, x893 said:

искать надо для дампа

Поищите пожалуйста. А я поделюсь исходниками, когда сделаю эмулятор.

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


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

On 9/4/2021 at 6:31 AM, firew0rker said:

сделайте его дамп

Spoiler



    =========================== USB Port2 ===========================

Connection Status        : 0x01 (Device is connected)
Port Chain               : 2-2
Properties               : 0x01
 IsUserConnectable       : yes
 PortIsDebugCapable      : no
 PortHasMultiCompanions  : no
 PortConnectorIsTypeC    : no

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : USB Input Device
Device Path              : \\.\usb#vid_10c4&pid_ea90#0001#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
Device ID                : USB\VID_10C4&PID_EA90\0001
Hardware IDs             : USB\VID_10C4&PID_EA90&REV_0000 USB\VID_10C4&PID_EA90
Driver KeyName           : {745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0015 (GUID_DEVCLASS_HIDCLASS)
Driver                   : \SystemRoot\System32\drivers\hidusb.sys (Version: 10.0.19041.868  Date: 2021-04-13)
Driver Inf               : C:\WINDOWS\inf\input.inf
Legacy BusType           : PNPBus
Class                    : HIDClass
Class GUID               : {745a17a0-74d3-11d0-b6fe-00a0c90f57da} (GUID_DEVCLASS_HIDCLASS)
Interface GUID           : {a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Service                  : HidUsb
Enumerator               : USB
Location Info            : Port_#0002.Hub_#0001
Location IDs             : PCIROOT(0)#PCI(1200)#USBROOT(0)#USB(2), ACPI(_SB_)#ACPI(PCI0)#ACPI(OHC1)#ACPI(RHUB)#ACPI(PRT2)
Container ID             : {91b1c1ff-9da3-527c-b901-93f5e37239af}
Manufacturer Info        : (Standard system devices)
Capabilities             : 0x94 (Removable, UniqueID, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code             : 0
Power State              : D0 (supported: D0, D3, wake from D0)
 Child Device 1          : HID-compliant vendor-defined device
  Device ID              : HID\VID_10C4&PID_EA90\6&302F8A82&0&0000
  Class                  : HIDClass

        ---------------- Connection Information ---------------
Connection Index         : 0x02 (2)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x01
Device Address           : 0x02 (2)
Is Hub                   : 0x00 (no)
Number Of Open Pipes     : 0x02 (2)
Device Bus Speed         : 0x01 (Full-Speed)
Pipe0ScheduleOffset      : 0x00 (0)
Pipe1ScheduleOffset      : 0x00 (0)

        --------------- Connection Information V2 -------------
Connection Index         : 0x02 (2)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x01
 Usb110                  : 1 (yes)
 Usb200                  : 0 (no)
 Usb300                  : 0 (no)
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00

    ---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x110 (USB Version 1.10)
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x40 (64 bytes)
idVendor                 : 0x10C4 (Silicon Laboratories, Inc.)
idProduct                : 0xEA90
bcdDevice                : 0x0000
iManufacturer            : 0x01 (String Descriptor 1)
 Language 0x0409         : "Silicon Labs"
iProduct                 : 0x02 (String Descriptor 2)
 Language 0x0409         : "CP2112"
iSerialNumber            : 0x03 (String Descriptor 3)
 Language 0x0409         : "0001"
bNumConfigurations       : 0x01 (1 Configuration)

    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0029 (41 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0x80
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x00 (no)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0xFA (500 mA)

        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00
bAlternateSetting        : 0x00
bNumEndpoints            : 0x02 (2 Endpoints)
bInterfaceClass          : 0x03 (HID - Human Interface Device)
bInterfaceSubClass       : 0x00 (None)
bInterfaceProtocol       : 0x00 (None)
iInterface               : 0x00 (No String Descriptor)

        ------------------- HID Descriptor --------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x21 (HID Descriptor)
bcdHID                   : 0x0101 (HID Version 1.01)
bCountryCode             : 0x00 (00 = not localized)
bNumDescriptors          : 0x01
Descriptor 1:
bDescriptorType          : 0x22 (Class=Report)
wDescriptorLength        : 0x0102 (258 bytes)
Error reading descriptor : ERROR_GEN_FAILURE

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x01 (1 ms)

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x01 (1 ms)

      -------------------- String Descriptors -------------------
             ------ String Descriptor 0 ------
bLength                  : 0x04 (4 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language ID[0]           : 0x0409 (English - United States)
             ------ String Descriptor 1 ------
bLength                  : 0x1A (26 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Silicon Labs"
             ------ String Descriptor 2 ------
bLength                  : 0x0E (14 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "CP2112"
             ------ String Descriptor 3 ------
bLength                  : 0x0A (10 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "0001"

 

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


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

8 часов назад, x893 сказал:

Error reading descriptor : ERROR_GEN_FAILURE

Обломс. Виндовс не дает сторонней программе прочитать report descriptors. Надо или подсматривать wireshark-ом обмен в момент подключения, либо восстанавливать по данным, сохраненным внутри виндовса (как это, судя по описанию, делает win-hid-dump).

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


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

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

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

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

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

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

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

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

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

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