查看: 3872|回复: 7

[求助] KL26, USB HOST, 如何使能设备的远程唤醒功能?

[复制链接]

该用户从未签到

9

主题

52

帖子

1

注册会员

Rank: 2

积分
138
最后登录
2018-11-29
发表于 2016-2-27 10:57:05 | 显示全部楼层 |阅读模式
本帖最后由 yangzhengyong 于 2016-3-1 11:52 编辑

我们系统中,KL26是USB主机,无线模块为USB设备。
    我们将USB软件移除,让总线上不在发SOF之后,下面的设备确实进入了休眠状态。
    但是它们无法通过Usb唤醒主机,询问设备厂家之后,答复说,根据USB规范,休眠之前需要SetFeature,使能设备端的usb_remote_wakeup功能,
    我们做这个实验时,一直失败,尝试了两家无线模块厂家的东西,都不成功,估计问题出在主机这边可能性比较大,我们没有USB协议分析仪,无法准确定位问题。
   
    我们USB lib版本为3.0.xxx, 实验代码如下。设置下去后,立即回读,根据usb2.0 spec描述,
    此时返回来的2个字节,第一个字节的bit1应该为1,但我们调试的结果是0,运行效果也是设备没有remote wakeup功能,应该是设置失败了。但设置过程中并没有报错。
    哪位大侠帮忙看看问题在哪里,谢谢!


INT8U u8Buff[4] = {0};
                        
if ( USB_STATUS_TRANSFER_QUEUED != (u32Ret = _usb_host_ch9_set_feature( dev_inst_ptr,
                                                                                                                REQ_TYPE_DEVICE,
                                                                                                                0,
                                                                                                                DEVICE_REMOTE_WAKEUP )))
{               
#if defined __DEBUG__
        printf("----- set feature fail:%d -----\n", u32Ret);
#endif
}
else
{
        if ( USB_STATUS_TRANSFER_QUEUED != (u32Ret = _usb_host_ch9_get_status( dev_inst_ptr,
                                                                                                                        REQ_TYPE_DEVICE,
                                                                                                                        0,
                                                                                                                        u8Buff )))
        {
        #if defined __DEBUG__
                printf("----- get feature fail:%d -----\n", u32Ret);
        #endif
        }
        else
        {
                if ( u8Buff[0] & 0x02 )
                {
                        sUsb.bEnableRemoteWakeup = TRUE;
                }
        }
}





我知道答案 目前已有7人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-2-29 10:28:11 | 显示全部楼层
楼主你好!
请问你用的USB什么方式的主机呢?
HID还是其他?
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

52

帖子

1

注册会员

Rank: 2

积分
138
最后登录
2018-11-29
 楼主| 发表于 2016-2-29 18:12:06 | 显示全部楼层
无线模块,CDC,

回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

52

帖子

1

注册会员

Rank: 2

积分
138
最后登录
2018-11-29
 楼主| 发表于 2016-2-29 18:32:31 | 显示全部楼层
本帖最后由 yangzhengyong 于 2016-2-29 18:41 编辑

补充一下,由于KL26的手册上明确写出,KL26作为HOST时,不支持remote wakeup,我们的处理方式是,将D+和D-接到MCU的比较器上,理论上,当设备端发出唤醒信号时,D+上会有电平变化(USB 2.0,全速)。用比较器的中断来唤醒主机,然后迅速进行USB应答。
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

52

帖子

1

注册会员

Rank: 2

积分
138
最后登录
2018-11-29
 楼主| 发表于 2016-3-1 11:57:06 | 显示全部楼层
本帖最后由 yangzhengyong 于 2016-3-1 11:59 编辑

@ FSL_TICS_ZJJ, 能帮我看看吗?
现在问题是,我们还不能确定问题到底出在 KL26还是无线模块那边,但两个不同厂家的三个产品都有同样的问题,估计问题在主机这边的可能性比较大。或者,我们可以买一个或者租一个USB分析仪,来确认这个问题,但这又能怎样呢,如果分析仪说KL26的这个setfeature有问题,我们又该如何处理呢?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-3-1 14:44:02 | 显示全部楼层
yangzhengyong 发表于 2016-3-1 11:57
@ FSL_TICS_ZJJ, 能帮我看看吗?
现在问题是,我们还不能确定问题到底出在 KL26还是无线模块那边,但两个 ...

楼主你好!
目前USB stack KL26主机的确是不支持remote wakeup的。
所以,如果你要唤醒主机,可以使用你说的比较器中断的方式。
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

52

帖子

1

注册会员

Rank: 2

积分
138
最后登录
2018-11-29
 楼主| 发表于 2016-3-1 17:18:37 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2016-3-1 14:44
楼主你好!
目前USB stack KL26主机的确是不支持remote wakeup的。
所以,如果你要唤醒主机,可以使用你 ...

恩,但现在的问题是,通过setfeature使能设备端 remote wakeup,这个事情一直不成功,进而造成,设备端不会给出任何唤醒信号到USB总线上。所以,我们首先需要解决setfeature这个事情,
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

15

帖子

0

注册会员

Rank: 2

积分
88
最后登录
2017-10-12
发表于 2017-7-1 09:19:45 | 显示全部楼层
楼主能分析一点开发  kl-26  USB host的资料给我吗,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 08:55 , Processed in 0.100693 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表