Jump to content

    
statementz

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Edited by Gradient

Share this post


Link to post
Share on other sites
26.03.2021 в 21:17, Gradient сказал:

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

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

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

Из Win Тhread.

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

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

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

 

 

 

Share this post


Link to post
Share on other sites
38 минут назад, Gradient сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Gradient сказал:

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

 

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

Share this post


Link to post
Share on other sites
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"

 

Share this post


Link to post
Share on other sites
8 часов назад, x893 сказал:

Error reading descriptor : ERROR_GEN_FAILURE

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.