关于这个,其实早些时候已经做好了想发出来的,但是一直想优化一下,但是最近有点忙,所以抽不出时间修改。
今天看到xb00t群里面【大意先生】,也就是本站的达克罗德大神。想到之前他有说到需要裸机的驱动,所以现在就先发出来填坑了。
关于移植过程可以参考全志F1C100S usb裸机驱动移植1
感谢达克罗德提供的F1C100S裸机编译工程F1C100S裸奔framebuffer+PWM+GPIO驱动
离线
占位
离线
我在nano上加载bin文件,插电脑上没反应。请问有什么需要注意的地方吗?
请问是怎么加载呢。这个工程是基于裸机的那个工程加入了printf 和 中断管理。
我测试时候是利用sunxi-fel烧录RAM里面跑的,用的以下命令
sunxi-fel spl firmware.bin
sunxi-fel -p write 0x80000000 firmware.bin
sunxi-fel exec 0x80000000;
离线
感谢LZ分享
我尝试用了一下 发现用JLink加载编译出来的firmware.bin进DRAM 确实是在PC设备管理器会提示未知usb设备(设备描述符请求失败) 但此时的串口打印功能无法正常使用
然后我从Makefile发现可以下载进spiflash 于是我就试了一下 发现串口打印功能可以正常使用 但是在PC设备管理器没有任何提示 从打印来看 程序没有进入USB中断 还要请教LZ有什么需要注意的地方
发现未知设备可能是没有进入中断,可以试着直接用sys_uart_putc函数打印一些测试信息看看有没有进入中断。烧录到flash运行应该和RAM是差不多的,但是我没有测试过烧录到flash跑。晚上测试一下
需要注意的是usb_device_init函数的参数不能是0
离线
总结几个问题 用没改动过的程序
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+内部的代码问题。
离线
樊星 说:微凉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的代码。
离线
微凉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 估计是哪个时钟没配好
嗯,应该是还差某个时钟,有的芯片内部时钟开关和其他外设有关联的,关了一个就关全部了,不知道全志这个会不会也有这样的坑
离线
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函数里面
离线
哪里有介绍芯片usb寄存器的文档?600里面没有,找了个a20里面只有host。
只有MUSB的官方寄存器文档,全志的好像没有见过
离线
我试了一下 有报错
编译不通过么?具体是报什么错误呢
离线
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启动进不了中断
嗯,这个是的,上面有讨论过这个问题。在楼下问题找到了,欢迎下载工程测试一下
离线
问题终于找到了,是差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)
离线
辛苦了!搞这么晚。最近没时间,有时间打算搞个USB Bootloader,就不用老按着短路spi 时钟的按钮来用sunxitools了
可以的,就用荔枝派上面那个按键,上电发现按下就跳sunxi-fel。我现在都是用笔头短触6脚和7脚来进入的
离线
请问CDC方式连到电脑上,为什么一次最多只能发送8个字节。发9个就全收不到,连IRQ都没有。并且后续什么都收不到了,需要断开连接,重连后正常。
楼主有没有遇到这个现象?
我是用Mac系统,系统识别出usbmodem,用串口通信发送数据。
你好,我用Windows的电脑测试了一下,的确是会发送数据超过8个字节有问题。抓了一下包,发现是设备没有收到数据。从这个现象上看,一般是硬件端点的maxpack设置不对。不过我对了一下寄存器,maxpack值512是没有问题的。
然后后面仔细看了一下,发现漏配置了端点1的fifo大小和地址。重新在usb_config_ep_in和usb_config_ep_out函数里面加入USBC_ConfigFifo函数就可以了。工程后面整理下再重新上传,可以按照上面说的先修改
离线
感谢楼主分享,希望尽快突破USB HOST
host已经ok了的
离线
是usb主机驱动吗?
这个是usb设备的驱动
离线
有没有模拟U盘的例子
目前没有,有空再移植分享下。mass storage 好像就几个命令。然后read10 write10对接好底层的存储设备就好了
离线
能模拟成USB 摄相头 UVC 吗?
淘宝小淘气的工程有uvc,我没有在f1c100s上调过
离线