Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

希望能补充一些tusb库的移植说明 #7

Open
ueJone opened this issue Apr 13, 2020 · 27 comments
Open

希望能补充一些tusb库的移植说明 #7

ueJone opened this issue Apr 13, 2020 · 27 comments

Comments

@ueJone
Copy link

ueJone commented Apr 13, 2020

首先感谢楼主付出的努力!
看楼主做了多款开发板的兼容,能否基于cubemx做个移植的说明呢?看了下《USB设备开发指南》还是不清楚怎么把tusb移植到自己的目标板上,真心希望楼主能出个说明资料,谢谢

@RadioOperator
Copy link

@ueJone
Copy link
Author

ueJone commented Apr 14, 2020

哇原来有啊,之前现在L4的芯片上移植没找着头绪,我看下资料,谢谢楼主

@ueJone
Copy link
Author

ueJone commented Apr 14, 2020

有哇:
http://blog.xtoolbox.org/add_teenyusb_to_cubemx_project/

楼主,这篇文章是不是不太适用新版的tusb了呢,新的tusb在usb_stack多了很多文件。或者说usb_stack目录下并非所有文件都需要加到工程中?我移植过程遇到了下面的问题:

把usb_stack目录下的所有源码添加到工程目录下,编译的时候usb_stack/inc/stm32_otg_platform.h会提示缺少board_config.h
board_config.h好像都是demo里做的bsp,demo里的board_config.h没有和我相似的芯片,需要您指导一下board_config.h中接口定义

@ueJone
Copy link
Author

ueJone commented Apr 14, 2020

“teeny_usb_init.h”也是在demo目录下,建议楼主把tusb的协议栈都归类到一个目录下,然后说明哪些接口需要用户来实现,这样方便移植

@xtoolbox
Copy link
Owner

有哇:
http://blog.xtoolbox.org/add_teenyusb_to_cubemx_project/

楼主,这篇文章是不是不太适用新版的tusb了呢,新的tusb在usb_stack多了很多文件。或者说usb_stack目录下并非所有文件都需要加到工程中?我移植过程遇到了下面的问题:

把usb_stack目录下的所有源码添加到工程目录下,编译的时候usb_stack/inc/stm32_otg_platform.h会提示缺少board_config.h
board_config.h好像都是demo里做的bsp,demo里的board_config.h没有和我相似的芯片,需要您指导一下board_config.h中接口定义

是的,那篇文章在写的时候用的时比较老的TeenyUSB,那个时候还没设计类驱动。现在新的TeenyUSB可能不太适合了,我后面会更新一下那篇文章。

@xtoolbox
Copy link
Owner

“teeny_usb_init.h”也是在demo目录下,建议楼主把tusb的协议栈都归类到一个目录下,然后说明哪些接口需要用户来实现,这样方便移植

是的,目前还缺少一个step by step的项目建立说明文档,只提供了几个例子,估计目前用TeenyUSB的人几乎都是从例子改代码来做的。
teeny_usb_init.h是通过工具(dt1.tusb.org)自动生成的,是根据描述符初始化端点的文件。
目前TeenyUSB的初始化部分不是很规范,端点0和其它端点是一起初始化的,按照USB设计端点0在reset时初始化,其它端点在set config后初始化。后面有规范化TeenyUSB的计划,到时候会一并处理这些问题。

@ueJone
Copy link
Author

ueJone commented Apr 20, 2020

有哇:
http://blog.xtoolbox.org/add_teenyusb_to_cubemx_project/

楼主,这篇文章是不是不太适用新版的tusb了呢,新的tusb在usb_stack多了很多文件。或者说usb_stack目录下并非所有文件都需要加到工程中?我移植过程遇到了下面的问题:
把usb_stack目录下的所有源码添加到工程目录下,编译的时候usb_stack/inc/stm32_otg_platform.h会提示缺少board_config.h
board_config.h好像都是demo里做的bsp,demo里的board_config.h没有和我相似的芯片,需要您指导一下board_config.h中接口定义

是的,那篇文章在写的时候用的时比较老的TeenyUSB,那个时候还没设计类驱动。现在新的TeenyUSB可能不太适合了,我后面会更新一下那篇文章。

我基于demo中的drd_rtt,最后总算是能识别设备了,说下我移植过程遇到的最头疼的地方吧:

  1. usb初始化部分都是直接用的寄存器接口
  2. USB的IO配置也是使用寄存器
  3. USB的参数、时钟、中断等配置
    这几个地方基本都是寄存器实现的,不同芯片会有差异,我这边花费了很多时间还是没跑起来,最终还是用直接调用HAL库的usb初始化代码简单暴力的跑起来了。

从兼容性、稳定性以及开发效率几个方面考虑推荐直接用cubemx生成的代码,也可以加上宏定义供用户选择。总之感谢您的付出,期待新的规范,还有这个库以后是不是也能做成平台无关的呢

@xtoolbox
Copy link
Owner

xtoolbox commented Apr 21, 2020 via email

@RadioOperator
Copy link

如果牺牲Teeny的优点,就不建议楼主搞成万能的USB库。
一个人的能力实在有限,就是厂家也是好几个团队的工作量。
建议楼主,

  1. 选择最常用,销量大,有特点的STM32芯片,目前有demo的还可以减少,重点优化完善。也方便测试。
  2. API最好是完全彻底兼容一个或几个常用的USB库,做到无缝更换。
  3. 其他的STM32,依靠使用者自己移植/分享。

@hacklinshell
Copy link

楼主,RTT的env环境使用的是cubemx ,建议就在原始的RTT上面,用cubemx配置下usb的初始化等,让rtt和cubemx自己把usb的初始化完成。然后再把tusb移植上去,这样是不是方便一些?

@xtoolbox
Copy link
Owner

xtoolbox commented May 27, 2020 via email

@hacklinshell
Copy link

你这个建议很好,后面打算把初始化的部分用cubemx来做,协议栈只处理协议,不管寄存器初始化

--------------原始邮件-------------- 发件人:"hacklinshell "<[email protected]>; 发送时间:2020年5月27日(星期三) 下午3:48 收件人:"xtoolbox/TeenyUSB" <[email protected]>; 抄送:"XToolBox "<[email protected]>;"Comment "<[email protected]>; 主题:Re: [xtoolbox/TeenyUSB] 希望能补充一些tusb库的移植说明 (#7) ----------------------------------- 楼主,RTT的env环境使用的是cubemx ,建议就在原始的RTT上面,用cubemx配置下usb的初始化等,让rtt和cubemx自己把usb的初始化完成。然后再把tusb移植上去,这样是不是方便一些? — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

感谢这么快回复啊,我正准备这么做,今天刚看到你这个库,rtt官方的usb host 的class都还没过更新,也用不了,我先这样搞下,tusb的代码我还没看。 usb的初始化 rtt是在cubemx配置后 回打开一个宏,然后就会进行usb初始化,配置为host就初始化为usbh设备 ,device就初始化一个usbd设备 ,然后usb示例再创建具体的实例,比如devcie ecm就多一个u0设备 ,我准备弄host模式下的rndis或者ecm,

@hacklinshell
Copy link

你好,感谢你的反馈。 你说的这几个问题确实很麻烦,当时的想法是只依赖ST的头文件,不依赖库的C文件。这样减少最终代码尺寸。带来的问题是就是测试不充分,无法保证在所有的芯片上都能正常工作。 如果继续采用这样的方式,随着厂家芯片的增多维护起来会更加困难。 后面会支持厂家库函数初始化的方式,把协议栈和设备操作进行分隔,这样也能支持更多其它厂家芯片。 不过这样弄下去就有点像keil和segger家的协议栈了,不够Teeny了。   ------------------ Original ------------------ From:  "zhenAcc"<[email protected]>; Date:  Mon, Apr 20, 2020 09:40 PM To:  "xtoolbox/TeenyUSB"<[email protected]>; Cc:  "XToolBox"<[email protected]>; "Comment"<[email protected]>; Subject:  Re: [xtoolbox/TeenyUSB] 希望能补充一些tusb库的移植说明 (#7)   有哇: http://blog.xtoolbox.org/add_teenyusb_to_cubemx_project/ 楼主,这篇文章是不是不太适用新版的tusb了呢,新的tusb在usb_stack多了很多文件。或者说usb_stack目录下并非所有文件都需要加到工程中?我移植过程遇到了下面的问题: 把usb_stack目录下的所有源码添加到工程目录下,编译的时候usb_stack/inc/stm32_otg_platform.h会提示缺少board_config.h board_config.h好像都是demo里做的bsp,demo里的board_config.h没有和我相似的芯片,需要您指导一下board_config.h中接口定义 是的,那篇文章在写的时候用的时比较老的TeenyUSB,那个时候还没设计类驱动。现在新的TeenyUSB可能不太适合了,我后面会更新一下那篇文章。 我基于demo中的drd_rtt,最后总算是能识别设备了,说下我移植过程遇到的最头疼的地方吧: usb初始化部分都是直接用的寄存器接口 USB的IO配置也是使用寄存器 USB的参数、时钟、中断等配置 这几个地方基本都是寄存器实现的,不同芯片会有差异,我这边花费了很多时间还是没跑起来,最终还是用直接调用HAL库的usb初始化代码简单暴力的跑起来了。 从兼容性、稳定性以及开发效率几个方面考虑推荐直接用cubemx生成的代码,也可以加上宏定义供用户选择。总之感谢您的付出,期待新的规范,还有这个库以后是不是也能做成平台无关的呢 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

嗨 ,兄弟 ,可以分享想你在最新teenyusb上移植的工程,想参考下,想一部分用RTT本身的usb初始化嗯,一部分用teenyusb

@xtoolbox
Copy link
Owner

xtoolbox commented May 29, 2020 via email

@hacklinshell
Copy link

目前最新的就是GitHub上的,新的还在设计中,没有开始写代码。

--------------原始邮件-------------- 发件人:"hacklinshell "<[email protected]>; 发送时间:2020年5月29日(星期五) 下午4:06 收件人:"xtoolbox/TeenyUSB" <[email protected]>; 抄送:"XToolBox "<[email protected]>;"Comment "<[email protected]>; 主题:Re: [xtoolbox/TeenyUSB] 希望能补充一些tusb库的移植说明 (#7) ----------------------------------- 你好,感谢你的反馈。 你说的这几个问题确实很麻烦,当时的想法是只依赖ST的头文件,不依赖库的C文件。这样减少最终代码尺寸。带来的问题是就是测试不充分,无法保证在所有的芯片上都能正常工作。 如果继续采用这样的方式,随着厂家芯片的增多维护起来会更加困难。 后面会支持厂家库函数初始化的方式,把协议栈和设备操作进行分隔,这样也能支持更多其它厂家芯片。 不过这样弄下去就有点像keil和segger家的协议栈了,不够Teeny了。   ------------------ Original ------------------ From:  "zhenAcc"<[email protected]>; Date:  Mon, Apr 20, 2020 09:40 PM To:  "xtoolbox/TeenyUSB"<[email protected]>; Cc:  "XToolBox"<[email protected]>; "Comment"<[email protected]>; Subject:  Re: [xtoolbox/TeenyUSB] 希望能补充一些tusb库的移植说明 (#7)   有哇: http://blog.xtoolbox.org/add_teenyusb_to_cubemx_project/ 楼主,这篇文章是不是不太适用新版的tusb了呢,新的tusb在usb_stack多了很多文件。或者说usb_stack目录下并非所有文件都需要加到工程中?我移植过程遇到了下面的问题: 把usb_stack目录下的所有源码添加到工程目录下,编译的时候usb_stack/inc/stm32_otg_platform.h会提示缺少board_config.h board_config.h好像都是demo里做的bsp,demo里的board_config.h没有和我相似的芯片,需要您指导一下board_config.h中接口定义 是的,那篇文章在写的时候用的时比较老的TeenyUSB,那个时候还没设计类驱动。现在新的TeenyUSB可能不太适合了,我后面会更新一下那篇文章。 我基于demo中的drd_rtt,最后总算是能识别设备了,说下我移植过程遇到的最头疼的地方吧: usb初始化部分都是直接用的寄存器接口 USB的IO配置也是使用寄存器 USB的参数、时钟、中断等配置 这几个地方基本都是寄存器实现的,不同芯片会有差异,我这边花费了很多时间还是没跑起来,最终还是用直接调用HAL库的usb初始化代码简单暴力的跑起来了。 从兼容性、稳定性以及开发效率几个方面考虑推荐直接用cubemx生成的代码,也可以加上宏定义供用户选择。总之感谢您的付出,期待新的规范,还有这个库以后是不是也能做成平台无关的呢 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. 嗨 ,兄弟 ,可以分享想你在最新teenyusb上移植的工程,想参考下,想一部分用RTT本身的usb初始化嗯,一部分用teenyusb — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

刚把teeny编译通过了,还没初始化。给几个建议总结下:
1:usb的初始化部分参考cubemx生成代码和rtt的初始化,把host和device分别初始化,两个分别定义的是HCD_HandleTypeDef 和 PCD_HandleTypeDef类型,本质都是HCD_TypeDef,
2:文件结构修改下,host是host的,device是device的,usb core部分区分开来。建议和Linux框架结构一样,或者rtt的一样。

楼主能否给个联系方式,可以直接请教你一些问题

@xtoolbox
Copy link
Owner

xtoolbox commented May 30, 2020 via email

@mttbx
Copy link

mttbx commented Apr 5, 2021

我完全不赞同hal的添加,hal是个非常垃圾的库,极大的占用了flash空间,对于一些商业应用而言,说他是垃圾是不过分的。使用LL库或者是寄存器的方法明显要更为优秀,考虑到usb的LL库支持的不充分,因此就应该直接采用寄存器版本。至于移植性个人提出以下建议:

  1. 对主流支持usb的stm32芯片在teenyusb内部进行移植,这样外界调用而言已经移植好了。
  2. 提供移植接口,就像许多usb栈,他们提供一个结构体,把结构体中的函数指针正确实现,就移植好了。

这样主流芯片予以支持,其他芯片提供接口。就算要新移植一个芯片也很容易,有参考。
我用过opencm3和libusb_stm32的库,他们的实现都是这样的,对我们开发者而言就非常的爽。但是他们对于usb的全面性不够,所以我找到了teenyusb。
不要让自己的缺点掩盖了自己的优点。

@mttbx
Copy link

mttbx commented Apr 5, 2021

@xtoolbox

@xtoolbox
Copy link
Owner

xtoolbox commented Apr 5, 2021

我完全不赞同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上进行了移植,现有的接口适应性还未得到充分测试。最近的计划是移植到一些国产的芯片上,用来测试库的兼容性,同时也作为移植到其它芯片的示例。

@jiuxiaxixi
Copy link

我完全不赞同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 库对实际的运行效果有影响么?

@RadioOperator
Copy link

@jiuxiaxixi HAL库,仍然大行其道主要是因为,整体来讲HAL库仍然是最容易使用的库 和 经过长期测试过的库。 有这样的基础,HAL库其他的问题,比如速度慢,占用内存大,等等,都是可以忽略不计的,特别是在MCU的速度和FLASH的大小都不是问题的今天。

@xtoolbox
Copy link
Owner

我完全不赞同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 库对实际的运行效果有影响么?

没有什么影响,加了只是引用的东西比较多一些,一些流程会比较啰嗦。

@jiuxiaxixi
Copy link

没有什么影响,加了只是引用的东西比较多一些,一些流程会比较啰嗦。

我在调试 rtt 的winusb 的时候感觉非常痛苦,好像bulk send 的时候必须先设置下 request ,作为端点和端点之间的 长度证明

@RadioOperator
Copy link

HAL库的主要问题是,配置受制于CubeMAX,一般的应用不容易配置出超出CubeMAX的预先设定,即是不能充分发挥出USB的潜力,比如一次想配置5个CDC口功能,HAL做不到。这也是各种第三方USB库的优点。

@SmartElec
Copy link

没看到 host msc设备的demo或者usbh_msc类

@xtoolbox
Copy link
Owner

新架构下的host库还没有开始做,host的msc在老版本才有,地址是 https://github.com/xtoolbox/archive_TeenyUSB

@yamslc
Copy link

yamslc commented Oct 19, 2023

高速usb有例子吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants