您尚未登录。

楼主 #1 2018-10-31 17:17:13

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

关于这个,其实早些时候已经做好了想发出来的,但是一直想优化一下,但是最近有点忙,所以抽不出时间修改。


今天看到xb00t群里面【大意先生】,也就是本站的达克罗德大神。想到之前他有说到需要裸机的驱动,所以现在就先发出来填坑了。







关于移植过程可以参考全志F1C100S usb裸机驱动移植1

感谢达克罗德提供的F1C100S裸机编译工程F1C100S裸奔framebuffer+PWM+GPIO驱动


下载: F1C100S裸机usb工程(支持hid和cdc类).zip

离线

楼主 #2 2018-10-31 17:18:25

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

占位

离线

#3 2018-10-31 17:19:24

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

太荣幸了,感谢楼主分享!

离线

#4 2018-10-31 17:21:07

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

太好了,感谢楼主分享!!!





离线

#5 2018-10-31 18:01:02

演技担当黄晓明
会员
注册时间: 2017-10-17
已发帖子: 184
积分: 122.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

屌爆了

离线

#6 2018-11-13 13:05:39

樊星
会员
注册时间: 2018-11-13
已发帖子: 5
积分: 5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

离线

#7 2018-11-13 13:39:17

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

樊星 说:

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

最近忙别的项目, 楼主的代码没来得及测试, 有没有测试过的朋友?





离线

#8 2018-11-14 10:13:32

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢LZ分享
我尝试用了一下 发现用JLink加载编译出来的firmware.bin进DRAM 确实是在PC设备管理器会提示未知usb设备(设备描述符请求失败) 但此时的串口打印功能无法正常使用
然后我从Makefile发现可以下载进spiflash 于是我就试了一下 发现串口打印功能可以正常使用 但是在PC设备管理器没有任何提示 从打印来看 程序没有进入USB中断 还要请教LZ有什么需要注意的地方

离线

楼主 #9 2018-11-14 10:33:39

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

樊星 说:

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;

离线

楼主 #10 2018-11-14 10:41:54

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

逸俊晨晖 说:

感谢LZ分享
我尝试用了一下 发现用JLink加载编译出来的firmware.bin进DRAM 确实是在PC设备管理器会提示未知usb设备(设备描述符请求失败) 但此时的串口打印功能无法正常使用
然后我从Makefile发现可以下载进spiflash 于是我就试了一下 发现串口打印功能可以正常使用 但是在PC设备管理器没有任何提示 从打印来看 程序没有进入USB中断 还要请教LZ有什么需要注意的地方

发现未知设备可能是没有进入中断,可以试着直接用sys_uart_putc函数打印一些测试信息看看有没有进入中断。烧录到flash运行应该和RAM是差不多的,但是我没有测试过烧录到flash跑。晚上测试一下
需要注意的是usb_device_init函数的参数不能是0

离线

#11 2018-11-14 12:02:21

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
樊星 说:

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;

按照LZ的步骤 实测能PC正常识别USB设备 并能在串口助手上打开和收发数据

离线

#12 2018-11-14 12:18:21

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

总结几个问题 用没改动过的程序
1. 用JLink加载编译出来的firmware.bin进DRAM
    先初始化DRAM 再用(https://whycan.cn/t_1858.html)链接3L的方法 现象是 PC设备管理器会提示未知usb设备(设备描述符请求失败)
    sys_uart_putc等串口打印函数无法打印出任何信息
2. sunxi-fel下载进spiflash
    在PC设备管理器没有任何提示 串口打印功能可以正常使用 估计没进入中断

离线

#13 2018-11-14 17:09:12

樊星
会员
注册时间: 2018-11-13
已发帖子: 5
积分: 5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
樊星 说:

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;

我是加载到flash跑的。没试过加到人RAM里。另我看到在咱们论坛令一个帖子里,chong大神基于Linux4.19出过一个补丁。好像是也是解决的类似问题。就是在RAM里能运行在flash里不能运行。我能力弱,还没看懂那个补丁,说是有clk设置不对。晕哥应该知道。

离线

#14 2018-11-14 17:28:50

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

樊星 说:
微凉VeiLiang 说:
樊星 说:

我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?

请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;

我是加载到flash跑的。没试过加到人RAM里。另我看到在咱们论坛令一个帖子里,chong大神基于Linux4.19出过一个补丁。好像是也是解决的类似问题。就是在RAM里能运行在flash里不能运行。我能力弱,还没看懂那个补丁,说是有clk设置不对。晕哥应该知道。

那个帖子后面那个补丁可以在 FLASH里面跑了, 可以关注一下.





离线

楼主 #15 2018-11-14 23:07:32

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

逸俊晨晖 说:

总结几个问题 用没改动过的程序
1. 用JLink加载编译出来的firmware.bin进DRAM
    先初始化DRAM 再用(https://whycan.cn/t_1858.html)链接3L的方法 现象是 PC设备管理器会提示未知usb设备(设备描述符请求失败)
    sys_uart_putc等串口打印函数无法打印出任何信息
2. sunxi-fel下载进spiflash
    在PC设备管理器没有任何提示 串口打印功能可以正常使用 估计没进入中断

测试了一下,的确烧录到flash后启动只打印没有发现usb设备。看来应该不是中断的原因,因为电脑usb没有发现设备,估计是时钟的原因,或者上下拉d+内部的代码问题。

离线

楼主 #16 2018-11-15 00:38:52

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

晕哥 说:
樊星 说:
微凉VeiLiang 说:

请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;

我是加载到flash跑的。没试过加到人RAM里。另我看到在咱们论坛令一个帖子里,chong大神基于Linux4.19出过一个补丁。好像是也是解决的类似问题。就是在RAM里能运行在flash里不能运行。我能力弱,还没看懂那个补丁,说是有clk设置不对。晕哥应该知道。

那个帖子后面那个补丁可以在 FLASH里面跑了, 可以关注一下.

对比了一下提供的补丁,里面是修改了USB PHY的时钟位,以前错误的是bit8(应该不是F1c100s的),后面变成bit1(根据手册上看bit1是对的)。然后这个工程我当时写了一个usb_phy_open_clock();函数,里面USBPHY_CLK_GAT_BIT定义的是1没错。所以可能还有其它地方是sunxi帮忙初始化了的,这个后面再仔细翻一翻Linux的代码。

离线

#17 2018-11-15 13:18:30

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
晕哥 说:
樊星 说:

我是加载到flash跑的。没试过加到人RAM里。另我看到在咱们论坛令一个帖子里,chong大神基于Linux4.19出过一个补丁。好像是也是解决的类似问题。就是在RAM里能运行在flash里不能运行。我能力弱,还没看懂那个补丁,说是有clk设置不对。晕哥应该知道。

那个帖子后面那个补丁可以在 FLASH里面跑了, 可以关注一下.

对比了一下提供的补丁,里面是修改了USB PHY的时钟位,以前错误的是bit8(应该不是F1c100s的),后面变成bit1(根据手册上看bit1是对的)。然后这个工程我当时写了一个usb_phy_open_clock();函数,里面USBPHY_CLK_GAT_BIT定义的是1没错。所以可能还有其它地方是sunxi帮忙初始化了的,这个后面再仔细翻一翻Linux的代码。

对比了一下RAM运行和flash运行时 读了USB PHY的时钟位 RAM运行的是0x3 flash运行的是0x2 也就是说brom除了D1要置高外 D0也要置高 但改了后还是在flash不能运行
我还发现 flash运行在初始化时USBC系列的寄存器 除了ISCR外都写不进去 比如VEND0 PCTL 写操作完一读 都是0 估计是哪个时钟没配好

离线

#18 2018-11-15 14:02:26

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

2018-11-15_135953.png

我咨询了 @chong 大神,然后对比了 https://whycan.cn/t_1672.html 两个补丁

usb_phy0_clk 这个寄存器 8bit改成了1bit 试一试.





离线

楼主 #19 2018-11-15 14:12:22

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

逸俊晨晖 说:
微凉VeiLiang 说:
晕哥 说:

那个帖子后面那个补丁可以在 FLASH里面跑了, 可以关注一下.

对比了一下提供的补丁,里面是修改了USB PHY的时钟位,以前错误的是bit8(应该不是F1c100s的),后面变成bit1(根据手册上看bit1是对的)。然后这个工程我当时写了一个usb_phy_open_clock();函数,里面USBPHY_CLK_GAT_BIT定义的是1没错。所以可能还有其它地方是sunxi帮忙初始化了的,这个后面再仔细翻一翻Linux的代码。

对比了一下RAM运行和flash运行时 读了USB PHY的时钟位 RAM运行的是0x3 flash运行的是0x2 也就是说brom除了D1要置高外 D0也要置高 但改了后还是在flash不能运行
我还发现 flash运行在初始化时USBC系列的寄存器 除了ISCR外都写不进去 比如VEND0 PCTL 写操作完一读 都是0 估计是哪个时钟没配好

嗯,应该是还差某个时钟,有的芯片内部时钟开关和其他外设有关联的,关了一个就关全部了,不知道全志这个会不会也有这样的坑

离线

楼主 #20 2018-11-15 14:16:19

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

晕哥 说:

https://whycan.cn/files/members/3/2018-11-15_135953.png

我咨询了 @chong 大神,然后对比了 https://whycan.cn/t_1672.html 两个补丁

usb_phy0_clk 这个寄存器 8bit改成了1bit 试一试.

是bit1,地址和偏移应该也是对的,在usb_phy_open_clock函数里面

离线

#21 2018-11-15 15:15:50

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

7.png
初始化完成后读寄存器
左边是ram运行 右边是flash运行
这个红色的位就很皮了 感觉和它有关 查了600的手册 发现这个位并没有定义 在程序上手动置低又不行 置不低

最近编辑记录 逸俊晨晖 (2018-11-15 15:16:35)

离线

#22 2018-11-15 15:41:37

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

逸俊晨晖 说:

https://whycan.cn/files/members/1105/7.png
初始化完成后读寄存器
左边是ram运行 右边是flash运行
这个红色的位就很皮了 感觉和它有关 查了600的手册 发现这个位并没有定义 在程序上手动置低又不行 置不低

看错了 是spi0的 不影响

离线

#23 2018-11-17 14:45:34

樊星
会员
注册时间: 2018-11-13
已发帖子: 5
积分: 5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

哪里有介绍芯片usb寄存器的文档?600里面没有,找了个a20里面只有host。

离线

楼主 #24 2018-11-18 22:11:39

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

樊星 说:

哪里有介绍芯片usb寄存器的文档?600里面没有,找了个a20里面只有host。

只有MUSB的官方寄存器文档,全志的好像没有见过

离线

#25 2018-11-19 08:04:00

樊星
会员
注册时间: 2018-11-13
已发帖子: 5
积分: 5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
樊星 说:

哪里有介绍芯片usb寄存器的文档?600里面没有,找了个a20里面只有host。

只有MUSB的官方寄存器文档,全志的好像没有见过

非常感谢。

离线

#26 2018-11-20 15:35:44

小王子&木头人
会员
注册时间: 2018-05-08
已发帖子: 72
积分: 4

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

我试了一下 有报错

离线

楼主 #27 2018-11-20 20:37:32

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

小王子&木头人 说:

我试了一下 有报错

编译不通过么?具体是报什么错误呢

离线

#28 2018-11-20 22:49:16

小王子&木头人
会员
注册时间: 2018-05-08
已发帖子: 72
积分: 4

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

usbd_stop_work                                                                 
ERR: cannot get irq 26, err 1                                                 
sunxi_udc_enable called                                                       
CONFIG_USB_GADGET_DUALSPEED: USBC_TS_MODE_HS                                   
usbd_start_work                                                               
sunxi_usb_device_enable end   

从flash启动进不了中断

离线

楼主 #29 2018-11-26 01:21:01

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

小王子&木头人 说:

usbd_stop_work                                                                 
ERR: cannot get irq 26, err 1                                                 
sunxi_udc_enable called                                                       
CONFIG_USB_GADGET_DUALSPEED: USBC_TS_MODE_HS                                   
usbd_start_work                                                               
sunxi_usb_device_enable end   

从flash启动进不了中断

嗯,这个是的,上面有讨论过这个问题。在楼下问题找到了,欢迎下载工程测试一下

离线

楼主 #30 2018-11-26 01:25:58

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

问题终于找到了,是差Bus Reset寄存器的usb位没有置一。
在usb_phy.c中增加了两个函数
void USBC_PhyConfig(void);
void USBC_ConfigFIFO_Base(void);
在usb_dev.c里面bsp初始化开启时钟后调用
下面是整个更新后的工程
F1C100S_USB_Driver_V1_1.zip

最近编辑记录 微凉VeiLiang (2018-11-26 01:29:51)

离线

#31 2018-11-26 08:43:51

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

辛苦了!搞这么晚。最近没时间,有时间打算搞个USB Bootloader,就不用老按着短路spi 时钟的按钮来用sunxitools了

离线

楼主 #32 2018-11-26 09:27:38

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

达克罗德 说:

辛苦了!搞这么晚。最近没时间,有时间打算搞个USB Bootloader,就不用老按着短路spi 时钟的按钮来用sunxitools了

可以的,就用荔枝派上面那个按键,上电发现按下就跳sunxi-fel。我现在都是用笔头短触6脚和7脚来进入的

离线

#33 2018-11-26 14:51:18

小王子&木头人
会员
注册时间: 2018-05-08
已发帖子: 72
积分: 4

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
小王子&木头人 说:

usbd_stop_work                                                                 
ERR: cannot get irq 26, err 1                                                 
sunxi_udc_enable called                                                       
CONFIG_USB_GADGET_DUALSPEED: USBC_TS_MODE_HS                                   
usbd_start_work                                                               
sunxi_usb_device_enable end   

从flash启动进不了中断

嗯,这个是的,上面有讨论过这个问题。在楼下问题找到了,欢迎下载工程测试一下

可以用了 感谢大神

离线

#34 2018-11-27 22:08:42

cityf
会员
注册时间: 2017-11-03
已发帖子: 195
积分: 195

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢各位大神,感谢楼主, 一样要试一试usb裸奔的味道

离线

#35 2018-11-28 14:54:05

Quotation
会员
注册时间: 2018-10-04
已发帖子: 296
积分: 264.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼主!已经快乐地开始用CDC了。

离线

#36 2018-11-29 09:15:15

Quotation
会员
注册时间: 2018-10-04
已发帖子: 296
积分: 264.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

请问CDC方式连到电脑上,为什么一次最多只能发送8个字节。发9个就全收不到,连IRQ都没有。并且后续什么都收不到了,需要断开连接,重连后正常。
楼主有没有遇到这个现象?
我是用Mac系统,系统识别出usbmodem,用串口通信发送数据。

离线

#37 2018-11-30 08:47:02

樊星
会员
注册时间: 2018-11-13
已发帖子: 5
积分: 5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:

问题终于找到了,是差Bus Reset寄存器的usb位没有置一。
在usb_phy.c中增加了两个函数
void USBC_PhyConfig(void);
void USBC_ConfigFIFO_Base(void);
在usb_dev.c里面bsp初始化开启时钟后调用
下面是整个更新后的工程
F1C100S_USB_Driver_V1_1.zip

感谢大神,谢谢分享

离线

#38 2018-11-30 16:16:18

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

问一下,在windows上编译程序,是用这个交叉工具链吗?
https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads
链接里面有gcc-arm-8.2-2018.11-i686-mingw32-arm-eabi.tar.xz
解压出来都是exe的。
标注是arm-eabi,网上查了查,这个工具链只能编译裸机程序是吧

离线

#39 2018-11-30 16:36:04

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

迪卡 说:

问一下,在windows上编译程序,是用这个交叉工具链吗?
https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads
链接里面有gcc-arm-8.2-2018.11-i686-mingw32-arm-eabi.tar.xz
解压出来都是exe的。
标注是arm-eabi,网上查了查,这个工具链只能编译裸机程序是吧

试一试, 应该没问题的。





离线

楼主 #40 2018-12-08 23:58:46

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

Quotation 说:

请问CDC方式连到电脑上,为什么一次最多只能发送8个字节。发9个就全收不到,连IRQ都没有。并且后续什么都收不到了,需要断开连接,重连后正常。
楼主有没有遇到这个现象?
我是用Mac系统,系统识别出usbmodem,用串口通信发送数据。

你好,我用Windows的电脑测试了一下,的确是会发送数据超过8个字节有问题。抓了一下包,发现是设备没有收到数据。从这个现象上看,一般是硬件端点的maxpack设置不对。不过我对了一下寄存器,maxpack值512是没有问题的。
然后后面仔细看了一下,发现漏配置了端点1的fifo大小和地址。重新在usb_config_ep_in和usb_config_ep_out函数里面加入USBC_ConfigFifo函数就可以了。工程后面整理下再重新上传,可以按照上面说的先修改

离线

#41 2019-01-14 09:59:14

小王子&木头人
会员
注册时间: 2018-05-08
已发帖子: 72
积分: 4

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

楼主修复8字节不能传的问题了吗

离线

#42 2019-01-14 12:38:41

Quotation
会员
注册时间: 2018-10-04
已发帖子: 296
积分: 264.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

小王子&木头人 说:

楼主修复8字节不能传的问题了吗

我自己改的能用了。调用USBC_ConfigFifo时还有些要注意的,关键修改在usb_dev.c的这段。
每次调用USBC_ConfigFifo,传入的offset/size应当是不同的。FIFO所占内存不能重叠,所以这一次调用的offset参数应当是上一次的offset+size。

static u32 fifo_offset = 0; // global

void usb_config_ep_in(int epidx,int maxpack,int type)
{
	u32 old_ep_idx  = 0;
	if(epidx)
	{
		usbprint("config int ep %d:%d , %d",epidx,maxpack,type);
		/* Save index */
		old_ep_idx = USBC_GetActiveEp();
		USBC_SelectActiveEp(epidx);
		u32 fifo_size = maxpack * 2;  // double buffer
		USBC_Dev_ConfigEp(type,USBC_EP_TYPE_TX,1,maxpack);
		USBC_ConfigFifo(USBC_EP_TYPE_TX, 1, fifo_size, fifo_offset);
		fifo_offset += fifo_size;
		USBC_INT_EnableEp( USBC_EP_TYPE_TX, epidx);
		USBC_SelectActiveEp(old_ep_idx);
		ep_max_len[epidx] = maxpack;
	}
}
void usb_config_ep_out(int epidx,int maxpack,int type)
{
	u32 old_ep_idx  = 0;
	if(epidx)
	{
		usbprint("config out ep %d:%d , %d",epidx,maxpack,type);
		/* Save index */
		old_ep_idx = USBC_GetActiveEp();
		USBC_SelectActiveEp(epidx);
		u32 fifo_size = maxpack * 2;  // double buffer
		USBC_Dev_ConfigEp(type,USBC_EP_TYPE_RX,1,maxpack);
		USBC_ConfigFifo(USBC_EP_TYPE_RX, 1, fifo_size, fifo_offset);
		fifo_offset += fifo_size;
		USBC_INT_EnableEp( USBC_EP_TYPE_RX, epidx);
		USBC_SelectActiveEp(old_ep_idx);
		ep_max_len[epidx] = maxpack;
	}
}

离线

#43 2019-01-15 11:15:22

Quotation
会员
注册时间: 2018-10-04
已发帖子: 296
积分: 264.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

在调试USB CDC中发现一处小bug。
CDC的规范要求,如果一次发送的数据长度是packet length的整数倍,则最后还需要发一个空的packet,表示结束。

涉及到2个文件的代码修改,如下:

int usb_cdc_send_data(unsigned char *buf,int len)
{
    int ret = usb_device_write_data(1, buf, len);
    if (ret != 0) {
        return ret;
    }

    // 长度整除packet_length时多发一个空packet,CDC协议要求的
    if (len % DATA_PACKET_SIZE == 0) {
        ret = usb_device_write_data(1, buf, 0);
    }
    return ret;
}

int usb_device_write_data(int ep,unsigned char * databuf,int len)
{
    int length = len;
    int write_len = 0;
    volatile int Timeout = 10000000;
    int pack_len = ep_max_len[ep];
    int data_pos = 0;
    if(usb_connect)
    {
        usbprint("usb_device_write_data len:%d",len);
        void * fifo = USBC_SelectFIFO(ep);
        USBC_SelectActiveEp(ep);
        do {
            while((USBC_Dev_IsWriteDataReady(USBC_EP_TYPE_TX))&&(--Timeout)); //等待清除写标志
            write_len = length > pack_len ? pack_len : length;
            USBC_WritePacket(fifo, write_len, databuf + data_pos);
            USBC_Dev_WriteDataStatus(USBC_EP_TYPE_TX,1);
            data_pos += write_len;
            length -= write_len;
            if(Timeout == 0)
            {
                usbprint("usb_device_write_data Time out!");
                return -1;
            }
            Timeout = 10000000;
        } while (length > 0);  // do..while 允许发0长度的packet
        return 0;
    }
    else
    {
        usbprint("usb_device_write_data faild! usb not connect!!");
        return -1;
    }
}

离线

#44 2019-01-15 21:53:33

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼上朋友填坑

离线

#45 2020-01-20 17:14:40

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

又完善一步,坑网有你们,越来越精彩

离线

#46 2020-02-25 17:09:30

yytyu
会员
注册时间: 2018-11-01
已发帖子: 34
积分: 18

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

mark

离线

#47 2020-04-16 18:49:14

liuchangyin
会员
注册时间: 2020-03-17
已发帖子: 204
积分: 199

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

离线

#48 2020-04-21 16:12:28

小丸子
会员
注册时间: 2019-09-26
已发帖子: 43
积分: 7

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢填坑

离线

#49 2020-04-22 11:48:55

czllong1989
会员
注册时间: 2019-10-31
已发帖子: 8
积分: 7.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢填坑 usb比较有难度 一般的很难搞定 能搞定的都是高手

离线

#50 2020-04-22 13:00:08

834492956
会员
注册时间: 2020-01-10
已发帖子: 11
积分: 1

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

usb比较有难度 一般的很难搞定 能搞定的都是高手

离线

#51 2020-05-08 13:45:15

cccsk
会员
注册时间: 2020-05-08
已发帖子: 10
积分: 4.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

谢谢分享

离线

#52 2020-05-08 22:37:33

stephone
会员
注册时间: 2019-10-09
已发帖子: 57
积分: 9

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

谢谢分享

离线

#53 2020-05-17 06:54:17

hoel
会员
注册时间: 2019-06-15
已发帖子: 96
积分: 31

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

有人有常规的USB HOST吗?

离线

#54 2020-06-26 16:35:08

Calcium
会员
注册时间: 2018-10-29
已发帖子: 10
积分: 10

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼上的填坑, 终于从FLASH中启动能正常使用USB CDC类了, 在使用过程中发现 只要将USB的调试打印信息屏蔽, 然后USB就不正常了。最后发现是在usb_cdc.c文件中有只要将usbprint("set_line_coding\n")与usbprint("get_line_coding\n")这两行注释屏蔽USB就不正常。猜想可能是由于屏蔽那两行打印信息导致后面不能正常操作某些寄存器。 哎USB太复杂了,  只能倚靠前辈的力量。

离线

#55 2020-06-29 12:48:17

rf
会员
注册时间: 2019-05-21
已发帖子: 27
积分: 2

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

DATA_PACKET_SIZE 是64 还是12?

离线

#56 2020-07-23 10:04:01

hughhuang
会员
注册时间: 2020-07-23
已发帖子: 9
积分: 9

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼主分享,希望能有很大的帮助,早日向楼主看齐。

离线

#57 2020-07-24 13:44:19

wenjiaguo
会员
注册时间: 2019-12-05
已发帖子: 8
积分: 3

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

看着不错,有时间试试。

离线

#58 2020-07-24 15:26:00

国超
会员
注册时间: 2020-07-24
已发帖子: 2
积分: 2

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼主,请问有EasyUSB V3s 版本可以分享吗

离线

#59 2020-07-26 12:39:36

vicc321
会员
注册时间: 2020-07-26
已发帖子: 3
积分: 3

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼主分享,希望能有很大的帮助!

离线

#60 2020-07-27 10:30:51

Delei
会员
注册时间: 2020-03-14
已发帖子: 3
积分: 3

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢楼主分享,希望尽快突破USB HOST

离线

#61 2020-08-06 14:56:17

foreversun
会员
注册时间: 2020-07-01
已发帖子: 7
积分: 2

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

感谢大佬,刚好遇到USB不能识别的问题,来学习下

离线

楼主 #62 2020-08-07 23:51:06

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

Delei 说:

感谢楼主分享,希望尽快突破USB HOST

host已经ok了的

离线

#63 2020-08-08 08:21:23

myxiaonia
会员
注册时间: 2019-06-18
已发帖子: 81
积分: 49.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:

host已经ok了的

可否指导一下

离线

#64 2020-09-18 20:56:37

david
会员
注册时间: 2018-03-05
已发帖子: 390
积分: 321.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

Calcium 说:

感谢楼上的填坑, 终于从FLASH中启动能正常使用USB CDC类了, 在使用过程中发现 只要将USB的调试打印信息屏蔽, 然后USB就不正常了。最后发现是在usb_cdc.c文件中有只要将usbprint("set_line_coding\n")与usbprint("get_line_coding\n")这两行注释屏蔽USB就不正常。猜想可能是由于屏蔽那两行打印信息导致后面不能正常操作某些寄存器。 哎USB太复杂了,  只能倚靠前辈的力量。

usb_cdc.c 这样改,

static void class_setup_request(USB_DeviceRequest* req_data)
{
	unsigned char bRequest = req_data->bRequest;
    int Timeout = USB_TIMEOUT_COUNT;
    int len;
    
	//u32 des_length,data_tmp[26],data_flag;
	if(bRequest == 0x20)//set_line_coding
   {
		//set_line_coding(handle, req_data);
	   //usb_device_read_data_status_ep0(0);
	   usbprint("set_line_coding\n");
	   port_line_coding_flag = 1;
       while(Timeout--)
       {
           len = USBC_ReadLenFromFifo(USBC_EP_TYPE_EP0);
           if(len == 7)
           {
               usbprint("set_line_coding:readlen:%d\n",len);
               unsigned char tmp[7];
               usb_device_read_data_ep_pack(0,tmp,7);
               set_line_codingstatic_ext(tmp);
               usb_device_read_data_status_ep0(1);
               usb_device_set_ep0_state(EP0_IDLE);
               port_line_coding_flag = 0;
               break;
           }
       }
       
       if (!Timeout) 
       {
           rt_kprintf("timeout, len %d\n", len);
       }

		//GD_USB_Set_CSR0L(0x88);
   }

离线

#65 2020-09-18 20:59:47

david
会员
注册时间: 2018-03-05
已发帖子: 390
积分: 321.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

现在发现大量回传数据,就是IN,会丢包。初步定为是USBC_WritePacket()被做好同步,哪位大神肯只招?

离线

#66 2020-09-18 21:01:08

david
会员
注册时间: 2018-03-05
已发帖子: 390
积分: 321.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

目前简单测试,IN传输64k每块的时候,可以到13MByte,而且还有优化的余地。还是高速的爽。

离线

#67 2020-09-18 21:02:58

david
会员
注册时间: 2018-03-05
已发帖子: 390
积分: 321.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

目前小改一下的,

u32 USBC_WritePacket(void *fifo, u32 cnt, void *buff)
{
	u32 len = 0;
	u32 i32 = 0;
	u32 i8  = 0;
	u8  *buf8  = 0;
	u32 *buf32 = 0;
    volatile int Timeout = 10000000;
    
    while((USBC_Dev_IsWriteDataReady(USBC_EP_TYPE_TX))&&(--Timeout)); // wait for last write to clear
    if (!Timeout) 
    {
        rt_kprintf("*");
        return 0;
    }

	//--<1>-- adjust data
	buf32 = buff;
	len   = cnt;

	i32 = len >> 2;
	i8  = len & 0x03;

	//--<2>-- deal with 4byte part
	while (i32--)
	{

		USBC_Writel(*buf32++, fifo);
	}

	//--<3>-- deal with no 4byte part
	buf8 = (u8 *)buf32;
	while (i8--) {
		USBC_Writeb(*buf8++, fifo);
	}

	return len;
}

离线

#68 2020-12-22 16:36:33

jefe
会员
注册时间: 2020-12-22
已发帖子: 2
积分: 2

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

是usb主机驱动吗?

离线

#69 2021-04-12 15:58:35

视觉℡
会员
注册时间: 2019-01-29
已发帖子: 41
积分: 23
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

有没有模拟U盘的例子





离线

楼主 #70 2021-04-15 21:04:23

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

jefe 说:

是usb主机驱动吗?

这个是usb设备的驱动

离线

楼主 #71 2021-04-15 21:06:07

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

视觉℡ 说:

有没有模拟U盘的例子

目前没有,有空再移植分享下。mass storage 好像就几个命令。然后read10 write10对接好底层的存储设备就好了

离线

#72 2021-04-18 22:47:56

gary
会员
注册时间: 2018-05-30
已发帖子: 54
积分: 13.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

能模拟成USB 摄相头 UVC 吗?

离线

楼主 #73 2021-04-19 20:50:11

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 627
积分: 522
个人网站

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

gary 说:

能模拟成USB 摄相头 UVC 吗?

淘宝小淘气的工程有uvc,我没有在f1c100s上调过

离线

#74 2021-05-06 12:08:54

windoufu
会员
注册时间: 2020-12-29
已发帖子: 7
积分: 19

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
视觉℡ 说:

有没有模拟U盘的例子

目前没有,有空再移植分享下。mass storage 好像就几个命令。然后read10 write10对接好底层的存储设备就好了

刚完成了一个

最近编辑记录 windoufu (2021-05-06 12:09:24)

离线

#75 2021-07-21 18:43:03

1587463659
会员
注册时间: 2020-11-18
已发帖子: 10
积分: 5.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

@微凉VeiLiang
你好,参考你的例程,移植了USB MSC,但是我的USB报文有问题,能识别到USB,但是不能识别MSC设备,这个一般会是什么问题,我MSC部分参考的是  圈圈USB的资料
kkk.png

离线

#76 2021-08-13 14:39:38

笔走天下
会员
注册时间: 2021-08-13
已发帖子: 126
积分: 0.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

大神,有没有keil开发环境下的代码呢

离线

#77 2021-10-15 14:53:34

Codeman--
会员
注册时间: 2021-10-15
已发帖子: 1
积分: 481

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

楼主,是否有C100S作为usb host功能来接U盘/HID之类设备的代码。

离线

#78 2021-10-15 19:22:50

david
会员
注册时间: 2018-03-05
已发帖子: 390
积分: 321.5

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉大神放出来过 坛子里找

离线

#79 2021-11-05 14:43:11

chenpeng30
会员
注册时间: 2021-10-25
已发帖子: 7
积分: 7

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:其他

#80 2022-06-20 17:20:52

Ican
会员
注册时间: 2022-06-11
已发帖子: 30
积分: 0

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

usb 大容量存储设备的例子有吗?大哥

离线

#81 2022-06-22 09:53:12

sniper
会员
注册时间: 2022-02-23
已发帖子: 8
积分: 3

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

微凉VeiLiang 说:
樊星 说:

哪里有介绍芯片usb寄存器的文档?600里面没有,找了个a20里面只有host。

只有MUSB的官方寄存器文档,全志的好像没有见过

MUSB的官方寄存器文档 在哪里可以下 ?

离线

#86 2023-04-30 16:51:01

marvinMaker
会员
注册时间: 2021-02-20
已发帖子: 1
积分: 1

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

usb主机的驱动,楼主还有没有研究了

离线

#89 2023-08-13 09:04:22

lzw
会员
注册时间: 2022-07-31
已发帖子: 20
积分: -7

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

什么时候出个虚拟u盘的

离线

#90 2023-11-28 17:25:35

huaze
会员
注册时间: 2023-11-27
已发帖子: 24
积分: 19

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

E:\Burn>.\Tools\sunxi-fel.exe spl rtthread.bin
SPL: eGON header is not found

E:\Burn>.\Tools\sunxi-fel.exe -p write 0x80000000 rtthread.bin
100% [================================================]   146 kB,  192.7 kB/s

E:\Burn>.\Tools\sunxi-fel.exe exec 0x80000000

好像不太行

离线

#91 2024-01-19 14:00:17

keaihuan21
会员
注册时间: 2024-01-19
已发帖子: 11
积分: 6

Re: 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类)

host模式通过otg 插入u盘可以被识别么?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn