USB 问题 SAM3S-EK -> 自定义卡

Posted

技术标签:

【中文标题】USB 问题 SAM3S-EK -> 自定义卡【英文标题】:USB issue SAM3S-EK -> Custom card 【发布时间】:2015-07-27 07:42:37 【问题描述】:

我正在使用 SAM3S-EK 演示板开发我的项目。我使用带有示例代码和 ASF 的 USB CDC 和 MSC 驱动程序,一切正常。现在我想将代码放入我的自定义卡中(使用 SAM3S1B)。 但这是我的问题。我已经分配了引脚并更改了时钟配置,但 Windows 无法识别该设备。所有描述符都等于 0(根据 USBLyser)。

有人可以帮我吗?

这是我的时钟配置文件(我有一个 16MHz 晶体):

// ===== System Clock (MCK) Source Options
#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLACK

// ===== System Clock (MCK) Prescaler Options   (Fmck = Fsys / (SYSCLK_PRES))
#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_4

// ===== PLL0 (A) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
// Use mul and div effective values here.
#define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_XTAL
#define CONFIG_PLL0_MUL             32
#define CONFIG_PLL0_DIV             2

// ===== PLL1 (B) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
// Use mul and div effective values here.
#define CONFIG_PLL1_SOURCE          PLL_SRC_MAINCK_12M_RC
#define CONFIG_PLL1_MUL             16
#define CONFIG_PLL1_DIV             2

// ===== USB Clock Source Options   (Fusb = FpllX / USB_div)
// Use div effective value here.
//#define CONFIG_USBCLK_SOURCE        USBCLK_SRC_PLL0
#define CONFIG_USBCLK_SOURCE        USBCLK_SRC_PLL1
#define CONFIG_USBCLK_DIV           2

// ===== Target frequency (System clock)
// - XTAL frequency: 16MHz
// - System clock source: PLLA
// - System clock prescaler: 4 (divided by 4)
// - PLLA source: XTAL
// - PLLA output: XTAL * 32 / 3
// - System clock is: 16 * 32 / 4 / 2 = 64MHz
// ===== Target frequency (USB Clock)
// - USB clock source: PLLB
// - USB clock divider: 2 (divided by 2)
// - PLLB output: XTAL * 12 / 2
// - USB clock: 16 * 12 / 2 / 2 = 48MHz

【问题讨论】:

【参考方案1】:

与 Windows 下使用的所有 USB 设备一样,您需要先安装特定于您所连接设备的 Windows 端 USB 驱动程序。

当您安装 Atmel Studio 6.2 或更高版本时,它会为您在固件中使用的 Atmel ASF USB 驱动程序安装 Windows 端 USB 驱动程序。该 Windows 驱动程序适用于我的 SAM4E 目标处理器。请注意,在 Windows 中加载驱动程序需要很长时间。它似乎已挂起。只要给它时间,它最终会安装驱动程序。您可能必须响应弹出警告以允许安装未签名的驱动程序。

Windows 驱动程序也可以单独下载和安装。使用此链接:

https://gallery.atmel.com/Products/Details/6272a8fd-68fe-43d8-a990-741878cfe7b6?

【讨论】:

感谢您的回答。问题出在它工作的开发卡上(我有正确的驱动程序),但在自定义卡上它不起作用(相同的代码在等效架构上运行,所以我认为我不需要新的驱动程序)。【参考方案2】:

仔细检查您的时钟频率。我正在使用 SAM4L 部件,它需要 PLL 从 OSC0 运行以生成 48 MHz 时钟。我有一段时间遇到同样的问题,因为我的 ABDACB 使用相同的时钟并改变了速率。据我了解,插入 USB 设备会根据速度感应 DP 或 DN 引脚上的单个上拉电阻。这就是告诉 Windows(主机)尝试通信的原因。如果时钟频率错误,windows中的属性都显示为0。

【讨论】:

以上是关于USB 问题 SAM3S-EK -> 自定义卡的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备)

STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备)

我无法在基于自定义 USB CDC 类的 STM32 设备上接收超过 64 个字节

62 stm32 usb自定义hid复合设备修改实验

62 stm32 usb自定义hid复合设备修改实验

62 stm32 usb自定义hid复合设备修改实验