CH563Q usb device 和 udp client.

你好, 2个问题请教下,

1.我目前把 CH563Q exam 的 usb deviceudp client整合一个程序, 由芯片usb接口插入host之后程序启动,

先把usb初始化,然后进入无穷回圈, usb 中断处理 host命令, 当接收命令去启动 udp client之后, usb 就在也不会发生没有中断了;

如果不启动 udp client,则usb数据包收发都正常. 这需要什么特殊处理吗?

例程大致如下(和 exam例子差不多):

IRQ_Handler  -> USBDev_IRQHandler

                       -> CH563NET_ETHIsr

                     -> CH563NET_TimeIsr

main -> USBDev_ModeSet/Init/UsbInt_Enable ->

while(1)  {

if(net_enable) {

    if(!init) { 

        CH563NET_LibInit

        CH563NET_CreatSocket

    } else {

        CH563NET_MainTask

        CH563NET_HandleGlobalInt

    }

}

2.CH563NET_GetPHYStatus 是否只在调用 CH563NET_SocketCreat 之后获取的状态才是有效的, 还是只能在发生改变时,

  中断获取?

3.udp client网络初始化时默认是有 enable ping功能的,这是不是当 CH563NET_SocketCreat 都完成之后

(这里都有指定ip等,返回都正确),

连上网线, 在别的 pc 或平台直接 pin ch563 ip就可以, 不需要在代码加上 PROTO_TYPE_IP_RAW 的处理?





启动网络后,您可以先看一下设备是否能正常做完枚举的过程。CH563NET_GetPHYStatus 函数,是用于Socket创建之前,正常的流程是网络库函数初始化完之后,就可以调用CH563NET_GetPHYStatus 函数检查PHY的连接状态。再完成Socket创建后,正常while循环调用网络的主函数,PC就可以正常PINGCH563。


建议把udp_client移植到usb_device下,在函数进入主循环前把USB和udp参数初始化完成。并在usb驱动可能进入的循环里都加上

CH563NET_MainTask();

if(CH563NET_QueryGlobalInt())  CH563NET_HandlerGlobalInt();


谢谢, 已经找到问题了, 原来是调用了 CH563NET_Init(库初始化) 以后, 全局中断被关了, 重新打开就行了.


只有登录才能回复,可以选择微信账号登录