XToolBox
XToolBox
目前最新的就是GitHub上的,新的还在设计中,没有开始写代码。 --------------原始邮件-------------- 发件人:"hacklinshell "
我的qq是19148022,添加时注明teenyusb交流 --------------原始邮件-------------- 发件人:"hacklinshell "
> 我完全不赞同hal的添加,hal是个非常垃圾的库,极大的占用了flash空间,对于一些商业应用而言,说他是垃圾是不过分的。使用LL库或者是寄存器的方法明显要更为优秀,考虑到usb的LL库支持的不充分,因此就应该直接采用寄存器版本。至于移植性个人提出以下建议: > > 1. 对主流支持usb的stm32芯片在teenyusb内部进行移植,这样外界调用而言已经移植好了。 > 2. 提供移植接口,就像许多usb栈,他们提供一个结构体,把结构体中的函数指针正确实现,就移植好了。 > > 这样主流芯片予以支持,其他芯片提供接口。就算要新移植一个芯片也很容易,有参考。 > 我用过opencm3和libusb_stm32的库,他们的实现都是这样的,对我们开发者而言就非常的爽。但是他们对于usb的全面性不够,所以我找到了teenyusb。 > 不要让自己的缺点掩盖了自己的优点。 感谢你的建议及反馈,就工程项目而言,HAL的确是一个比较差的库。我认为HAL的目标不是用来做实际的工程,而是用来给工程师验证板子是否正确,特别是配合CubeMX,对于外设的验证非常方便。而TeenyUSB使用HAL做底层,也能较容易实现快速验证这一目的。对于STM32的OTG型号芯片,后续不太会投入精力来做寄存器版本的。TeenyUSB的Archive版本的OTG部分就是采用的寄存器,带来的问题就是测试很不充分,换型号十分困难。 更加方便的移植接口是很好的建议,也是未来TeenyUSB的主要目标。由于目前只在STM32上进行了移植,现有的接口适应性还未得到充分测试。最近的计划是移植到一些国产的芯片上,用来测试库的兼容性,同时也作为移植到其它芯片的示例。
> > > 我完全不赞同hal的添加,hal是个非常垃圾的库,极大的占用了flash空间,对于一些商业应用而言,说他是垃圾是不过分的。使用LL库或者是寄存器的方法明显要更为优秀,考虑到usb的LL库支持的不充分,因此就应该直接采用寄存器版本。至于移植性个人提出以下建议: > > > > > > 1. 对主流支持usb的stm32芯片在teenyusb内部进行移植,这样外界调用而言已经移植好了。 > > > 2. 提供移植接口,就像许多usb栈,他们提供一个结构体,把结构体中的函数指针正确实现,就移植好了。 > > > > > > 这样主流芯片予以支持,其他芯片提供接口。就算要新移植一个芯片也很容易,有参考。 > > > 我用过opencm3和libusb_stm32的库,他们的实现都是这样的,对我们开发者而言就非常的爽。但是他们对于usb的全面性不够,所以我找到了teenyusb。 > >...
> 新架构下的host库还没有开始做,host的msc在老版本才有,地址是 https://github.com/xtoolbox/archive_TeenyUSB
感谢你反馈的问题,TeenyUSB的电源管理部分没有进行过测试。根据你反馈的问题很有可能是设备收到resume信号后没有正确地配置芯片工作模式导致的。
> 主机使用CTRL-TRANSFER来获取数据的时候 > 如果不在SETUP回调函数(class-handler)中立即发送数据 > 而转到线程中再调用tusb_control_send,则主机无法收到发送的数据 > 用wireshark抓包,返回的包长度为0字节 > > 比如:HID-GET-REPORT > 如果在SETUP中断中立即调用tusb_control_send发送数据,则主机收到正确数据 > 如果转发到线程模式,在线程中调用tusb_control_send,则主机收到0字节包 目前TeenyUSB没有为控制传输设计延迟处理机制,所以出现了这样的情况。感谢你的反馈,后续考虑这种多线程情形下的控制传输处理问题。
感谢反馈,已修正。
1. In MSC, we need check the length before invoke block_write, int length = min(msc->state.data_out_length, sizeof(msc->state.data_buffer)); 2. In HID and CDC, may need check the setup data length before next...
感谢反馈。已经做出相关修正。 关于第(2)点,如果要在运行时动态设置端点,可能需要遍历配置描述符的所有接口配置,然后找出最大的端点号。 但是这还会遇到多配置的情况。如果单靠代码来动态配置,最可靠的办法就是用你的这个办法,直接预留出最大端点。