3.10 内核的 RNDIS 搞定了。
f1c100s 的手册中关于 USB 有这样的说明:
Supports up to 3 User-Configurable Endpoints for Bulk , Isochronous, Control and Interrupt
bi-directional transfers (Endpoint1, Endpoint2)
支持 INT 传输的只有 EP1 和 EP2,目前代码采用的是 EP4,是无法工作的。按如下修改后,在 Windows 下 RNDIS 没问题了。
static const char ep0name [] = "ep0"; static const char ep1in_bulk_name [] = "ep1in-bulk"; static const char ep1out_bulk_name [] = "ep1out-bulk"; #if 1 static const char ep2in_bulk_name [] = "ep2-int"; // 作为 INT 节点,为了 usb_ep_autoconfig 能查询到 #else static const char ep2in_bulk_name [] = "ep2in-bulk"; #endif static const char ep2out_bulk_name [] = "ep2out-bulk"; static const char ep3_iso_name [] = "ep3-iso"; static const char ep4_int_name [] = "ep4-int"; static const char ep5in_bulk_name [] = "ep5in-bulk"; static const char ep5out_bulk_name [] = "ep5out-bulk";
.ep[3] = { .num = 2, .ep = { .name = ep2in_bulk_name, .ops = &sunxi_udc_ep_ops, .maxpacket = SW_UDC_EP_FIFO_SIZE, }, .dev = &sunxi_udc, //.fifo_size = SW_UDC_EP_FIFO_SIZE, .bEndpointAddress = (USB_DIR_IN | 2), #if 1 .bmAttributes = USB_ENDPOINT_XFER_INT, #else .bmAttributes = USB_ENDPOINT_XFER_BULK, #endif
是在sunxi_udc.h和sunxi_udc.c里修改吗?
]]>ippen 说:f1c100 和 f1c100s 是不同的芯片
f1c100 是 2011年出的f1c100 和 f1c100s 肯定是共一个die 无疑了,
只是f1c100s 封装了一个 32M DDR,
可能引出来的pin没有 f1c100多.
如果这样,那么f1c600就是不同芯片了,因为c600 usb部分写着8 user-configure endpoint
如果f1c100s和f1c100相同,找f1c100的bsp看看应该有帮助
]]>f1c100 和 f1c100s 是不同的芯片
f1c100 是 2011年出的
f1c100 和 f1c100s 肯定是共一个die 无疑了,
只是f1c100s 封装了一个 32M DDR,
可能引出来的pin没有 f1c100多.
szyusong 说:3.10 内核的 RNDIS 搞定了。
f1c100s 的手册中关于 USB 有这样的说明:
Supports up to 3 User-Configurable Endpoints for Bulk , Isochronous, Control and Interrupt
bi-directional transfers (Endpoint1, Endpoint2)
支持 INT 传输的只有 EP1 和 EP2,目前代码采用的是 EP4,是无法工作的。@szyusong,你的手册是哪里找到的?我找了一圈,没找到,据说和f1c100s相同的f1c600的手册,里面写的是8 User-Configurable Endpoints
方便的话共享一下手册
http://dl.linux-sunxi.org/F1C100/Allwinner_F1C100_datasheet_20110331.pdf
在其中搜“Endpoint1”。
本地下载:Allwinner_F1C100_datasheet_20110331.pdf
听说而已,仅供参考.
]]>@szyusong 这个得再请出大神才行。
按 @szyusong看到的手册,f1c100s是3 个endpoints,而我们找到的bsp是f1c600的,c600是8 个endpoint,所以这两者的差异,导致usb 驱动不能通用
应该要找f1c100s专用的bsp
3.10 内核的 RNDIS 搞定了。
f1c100s 的手册中关于 USB 有这样的说明:
Supports up to 3 User-Configurable Endpoints for Bulk , Isochronous, Control and Interrupt
bi-directional transfers (Endpoint1, Endpoint2)
支持 INT 传输的只有 EP1 和 EP2,目前代码采用的是 EP4,是无法工作的。
@szyusong,你的手册是哪里找到的?我找了一圈,没找到,据说和f1c100s相同的f1c600的手册,里面写的是8 User-Configurable Endpoints
方便的话共享一下手册
从主机抓包,抓到的数据不是连续的,时间是跳跃的,0秒,5秒,25秒,45秒,66秒等,不知道系统卡在哪个环节了
]]>晕哥 说:现在我这里还有一个问题, 请教 @szyusong, USB只能工作在 device 模式才能驱动 RNDIS, 而选择 OTG的时候, 插入电脑或者U盘都是没反应的, 这个问题应该如何解决呢?
我手头的板子没法测试,得确保 usb_id_gpio, usb_det_vbus_gpio, usb_drv_vbus_gpio 这几个都有有效的管脚相对应。
这个是 olimex 在 github A10-OLinuXino-Lime_Rev_A.pdf 原理图, 上面三个引脚都有的.
我手上这个是licheepi nano, 从原理图Lichee_nano.pdf上面看,只有 usb_id, 其他两个脚是没有的. 但是我修改 sys_config.fex :
usb_id_gpio = port:PE02<0><1><default><default>
仍然无法正常检测device或者host.
]]>现在我这里还有一个问题, 请教 @szyusong, USB只能工作在 device 模式才能驱动 RNDIS, 而选择 OTG的时候, 插入电脑或者U盘都是没反应的, 这个问题应该如何解决呢?
我手头的板子没法测试,得确保 usb_id_gpio, usb_det_vbus_gpio, usb_drv_vbus_gpio 这几个都有有效的管脚相对应。
]]>晕哥 说:现在我这里还有一个问题, 请教 @szyusong, USB只能工作在 device 模式才能驱动 RNDIS, 而选择 OTG的时候, 插入电脑或者U盘都是没反应的, 这个问题应该如何解决呢?
感觉也是中断引起的,单独device或者单独host都正常,就是otg状态,只能识别device,不能识别host
我的配置成otg,无论device还是host都无法识别。
]]>