WhyCan Forum(哇酷论坛)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

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

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 241

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

关于这个,其实早些时候已经做好了想发出来的,但是一直想优化一下,但是最近有点忙,所以抽不出时间修改。今天看到xb00t群里面【大意先生】,也就是本站的达克罗德大神。想到之前他有说到需要裸机的驱动,所以现在就先发出来填坑了。
关于移植过程可以参考全志F1C100S usb裸机驱动移植1
感谢达克罗德提供的F1C100S裸机编译工程F1C100S裸奔framebuffer+PWM+GPIO驱动
F1C100S裸机usb工程(支持hid和cdc类)

离线

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

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 241

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

占位

离线

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

达克罗德
会员
注册时间: 2018-04-10
累计积分: 733

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

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

离线

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

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,939

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

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

离线

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

演技担当黄晓明
会员
注册时间: 2017-10-17
累计积分: 70

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

屌爆了

离线

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

樊星
会员
注册时间: 2018-11-13
累计积分: 5

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

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

离线

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

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,939

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

樊星 说:

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

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

离线

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

逸俊晨晖
会员
注册时间: 2018-08-29
累计积分: 44

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
累计积分: 241

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
累计积分: 241

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
累计积分: 44

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
累计积分: 44

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

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

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,939

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
累计积分: 241

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
累计积分: 241

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
累计积分: 44

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

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,939

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
累计积分: 241

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
累计积分: 241

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
累计积分: 44

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
累计积分: 44

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

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

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

离线

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

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 241

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

樊星 说:

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

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

离线

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

樊星
会员
注册时间: 2018-11-13
累计积分: 5

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

微凉VeiLiang 说:
樊星 说:

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

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

非常感谢。

离线

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

小王子&木头人
会员
注册时间: 2018-05-08
累计积分: 35

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

我试了一下 有报错

离线

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

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 241

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

小王子&木头人 说:

我试了一下 有报错

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

离线

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

小王子&木头人
会员
注册时间: 2018-05-08
累计积分: 35

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
累计积分: 241

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
累计积分: 241

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
累计积分: 733

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

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

离线

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

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 241

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

达克罗德 说:

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

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

离线

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

小王子&木头人
会员
注册时间: 2018-05-08
累计积分: 35

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
累计积分: 194

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

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

离线

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

Quotation
会员
注册时间: 2018-10-04
累计积分: 142

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

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

离线

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

Quotation
会员
注册时间: 2018-10-04
累计积分: 142

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

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

离线

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

樊星
会员
注册时间: 2018-11-13
累计积分: 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
累计积分: 368

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

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,939

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
累计积分: 241

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
累计积分: 35

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

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

离线

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

Quotation
会员
注册时间: 2018-10-04
累计积分: 142

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
累计积分: 142

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

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

感谢楼上朋友填坑

离线

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

sea18c
会员
注册时间: 2019-08-05
累计积分: 57

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

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

离线

页脚