Do you know about the GL850G? It is about $0.30. The chip is automatic, no need for SMBUS.
http://www.kean.com.au/oshw/WR703N/GL850G%20USB%20Hub%201.07.pdf http://www.aliexpress.com/item/new-hope-GL850G-GL850-SSOP28-100pcs-lots/1860488763.html On Mon, Aug 18, 2014 at 12:20 PM, George Ioakimedes <georgei...@gmail.com> wrote: > I'm working on my new Baseboard design which has a Microchip 4-port USB Hub > chip on it. This chip uses only a SMBus Write and Read command. I upgraded > the kernel to 3.4.90 since 3.4.75 was still using 200kHz as the I2C default > speed. > > I'm using Python to issue commands and looking at a write_i2c_block_data > command on the scope I have confirmed that the command structure is sent > properly. I need to also decode on the scope the read but it appears that > the read is missing the 1st byte. > > If I issue a > > sudo i2cdump -y 1 0x2c s > Error: Adapter does not have SMBus block read capability > > but if I issue a > cubie@Cubian:~$ sudo i2cdump -y 1 0x2c i > 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef > 00: 20 24 04 14 25 b3 0b 9b 00 01 00 00 00 01 32 01 $??%???.?...?2? > 10: 32 32 04 09 13 15 0a 49 00 4f 00 00 00 54 00 45 22?????I.O...T.E > 20: 20 43 00 48 00 4e 00 4f 00 4c 00 4f 00 47 00 49 C.H.N.O.L.O.G.I > 30: 00 45 00 53 00 00 00 4c 00 4c 00 43 00 00 00 00 .E.S...L.L.C.... > 40: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... > 50: 00 00 00 00 00 42 00 69 00 67 00 00 00 42 00 72 .....B.i.g...B.r > 60: 20 6f 00 74 00 68 00 65 00 72 00 00 00 42 00 61 o.t.h.e.r...B.a > 70: 00 73 00 65 00 62 00 6f 00 61 00 72 00 64 00 00 .s.e.b.o.a.r.d.. > 80: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... > 90: 00 00 00 32 00 30 00 31 00 34 00 30 00 38 00 30 ...2.0.1.4.0.8.0 > a0: 20 30 00 30 00 31 00 00 00 00 00 00 00 00 00 00 0.0.1.......... > b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > c0: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... > d0: 00 e1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .?.............. > e0: 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... > f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > > Notice how every other "0" byte is a 0x20? > > If I run this code: > > import smbus > bus = smbus.SMBus(1) > reg00 = [0x20, 0x24, 0x04, 0x14, 0x25, 0xB3, 0x0B, 0x9B, 0x00, 0x01, 0x00, > 0x00, 0x00, 0x01, 0x32, 0x01, 0x32] > bus.write_i2c_block_data(0x2c, 0x00, reg00) > > You get the above dump. From my understanding the 1st byte is supposed to be > the number of bytes being sent. That code does appear correctly on the scope > when I'm writing data > > I've made some progress and it appears that the hub does get enumerated: > > cubie@Cubian:~$ lsusb > Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub > Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > > But if I try to get some additional information about the hub, lsusb > complains that it couldn't open the hub so I'm not sure if it really > enumerated properly > > cubie@Cubian:~$ lsusb -v -s 001:003 > > Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub > Couldn't open device, some information will be missing > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 2.00 > bDeviceClass 9 Hub > bDeviceSubClass 0 Unused > bDeviceProtocol 2 TT per port > bMaxPacketSize0 64 > idVendor 0x0424 Standard Microsystems Corp. > idProduct 0x2514 USB 2.0 Hub > bcdDevice b.b3 > iManufacturer 1 > iProduct 2 > iSerial 3 > bNumConfigurations 1 > Configuration Descriptor: > bLength 9 > bDescriptorType 2 > wTotalLength 41 > bNumInterfaces 1 > bConfigurationValue 1 > iConfiguration 0 > bmAttributes 0xe0 > Self Powered > Remote Wakeup > MaxPower 2mA > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 0 > bAlternateSetting 0 > bNumEndpoints 1 > bInterfaceClass 9 Hub > bInterfaceSubClass 0 Unused > bInterfaceProtocol 1 Single TT > iInterface 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x81 EP 1 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0001 1x 1 bytes > bInterval 12 > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 0 > bAlternateSetting 1 > bNumEndpoints 1 > bInterfaceClass 9 Hub > bInterfaceSubClass 0 Unused > bInterfaceProtocol 2 TT per port > iInterface 0 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x81 EP 1 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0001 1x 1 bytes > bInterval 12 > > If I plug a keyboard into the hub it does not show up so I know that > something is still not right. Since the idVendor and idProduct come through > correctly I am going to assume that at least part of the registers did get > written correctly even though reading them says they did not. > > If anyone has any helpful advice or knowledge of this I would greatly > appreciate some feedback! > > Thanks, > George > > -- > You received this message because you are subscribed to the Google Groups > "linux-sunxi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to linux-sunxi+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- Jon Smirl jonsm...@gmail.com -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.