完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
嗨,大家好,我已经试了一段时间,让我的设备准备好,但我仍然坚持从PC上接收任何消息。我重新设置,然后总线_活动_检测,然后空闲-没有SOF或事务_完成。我已经设置了我认为需要的,但是-我不知道什么时候应该清除UPUEN和其他一些细小的现在我必须学习RunMy问题:为什么我不能得到TrNIF?(下一步,我必须得到数据,但我有一个想法如何做到这一点)-为什么我得到空闲int?-我该什么时候转向UPUN?我已经看了MLA,我没有找到答案。事实上,我在那里没有发现任何关于这个水平的东西。我的代码:;CONFIG1在调试_u CONFIFIG1_CONFIFIG1_CONFIFIG1_CONFIFIG1,_FOSC_INTOSC&FOSC_INTOSC_INTOSC&WDTE_OFF&WDTE_OFF&WDTE_OFOFF&WDTE_OFF&WDTE_OFF_OFF&WWRTE_OFF_OFF&PWRTE_OFF_OFF&MCLRERERERERERERE_ON_ON_ON&ON&CP_OFF&CP_OFF&CP_OFF F;CONFIG2_CONFIG2_CONFIG2,_W关闭和放大器;CPUDIV_NOCLKDIV&;USBCLK_24MHz和放大器;PLLMULT_3x和放大器;PLPLLEN_启用;PLPLLEN_启用;STVRE_关闭和放大器;BORV_LO_LO_LO&;LPBOBO_关闭和放大器;LVP_关闭部分:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------PLL启用,PLL3x,8MHZ,结果24MHz,osc config模式;MOVLW b'11110100';PLL启用,PLL3x,4MHZ,结果24MHz(失败版本)MOVWF OSCCON;等待PLL准备好银行OSTATWPLLDY BTFSS OSCSTAT,PLLY GOLY GOLY GOLLY GOBFSS OSTAT,BTFSS OSTAT,OSTS;GOTO WPLLY BTFSS OSTAT,HFIOFR GOTO WPLLD;USB中断(启用)银行密码2 BSFUSB银行保险单PIR2 BCF PIR2 BCF PIR2,USBIF银行保险单MOVFMOVFMOVFMOVFMOVFUEUE;清除USB地址CLRFUADDRVVVVB00010110';为设置MOVWF UEP1 MOVPMOVWF UEP1的端点设置;USB设置BCF UCFF UCFG UCFG UCFG UCFG UCFG UCFF UCFG UCFG、PPB0 BCBBCF UCFG UCFF UCFG UCFG、PPB1 BSF BSF UCFG UCFG UCFG、PPB1 BSF UCFG UCFG UCFG UCFG、PPBBBBBB0 BCBBBBBCFUCFF UCFF UCFG、PPBBCFUCFUCF6mhzar中断标志CLRF UIR CLRF UEIR;BSF UCON,PKTDIS BSF UCON,PPBRST;重置乒乓缓冲区BSF UCON,USBEN;最后启用RETURN;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------UIR BTFSC UIR、STALLIF CALL STALL_Handshake BANKSEL UIR BTFSC UIR、IDLEIF CALL Idle_.BANKSEL UIR BTFSC UIR、TRNIF CALL Transaction_Complete BANKSEL UIR BTFSC UIR、ACTVIF CALL Bus_Activity_Detect BANKSEL UIR BTFSC UIR、URSTIF CALL USB_Reset;USB错误BANKSEL UIR BTFSS UIR、UERRIF;跳过器RoR部分如果没有错误GoToSubBScUEIR,BTSEF调用BITYStUpLyError BunsServer UEIR BTFSC UEIR,BtoEF调用BuSurTurnOrthTimeOutOrthBuffer-UEIR BTFSC UEIR,DFN8EF调用DATAYFieldSIEZY错误BANCSEL UEIR BTFSC UEIR,CRC16EF调用CRC16B失败BURSEL UEIR BTFSC UEIR,CRC5EF调用CRC5HOSTORIN BACKSEL UEIR BTFSC UEIR,PIDEF调用PIDYCHECKION失败;清除USB错误标志BANSEL UIR BCF UIR,UERIFUSPBIN INTHEAD;清除USB INTING标志BANKSEL PIR2 BCF PIR2,UBFIFEST;----------------------------STARSTIOFOFFrraskToint;令牌;在这里做点什么?银行挂号BSF挂号,4;绿色银行挂号BCF挂号,SOFIF RETURNSTALL_Handshake BANKSEL LATC BSF挂号,4;绿色银行挂号BCF挂号,STALLIF RETURNIdle_Detect BANKSEL LATC;BSF LATC,4;绿色银行挂号;进入暂停模式BSF UCON,SUSPND BCF UIR,IDLEIFRETURransaction_Complete BANKSEL USTAT MOVF USTAT,WBANSEL LATC BSF LATC,3;红色;DIR?末端?银行UIR BCF UIR,TRNIF RETURNBus_Activity_.Bank SEL LATC BSF LATC,3;redBANKSEL BCF UCON,SUSPND._LOOP BTFSS UIR,ACTVIF BRA._DONE BCF UIR,ACTVIF BRA._LOOP._DONE Bank LATC BCF LATC BCF LATC,3;redBANKSEL UCFG;BCF UCFG,UPUEN;上拉启用RETURNUSB_Reset;清除USB地址自动取款机UCFG;BCF UCFG,UPUEN;上拉启用银行LATA BCF LATA,5 BCF LATA,3 BANKSEL UIR BCF UIR,URSTIF RETURN;错误处理程序--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------d_Size_Error BANKSEL UEIR BCF UEIR, DFN8EF RETURNCRC16_Failure BANKSEL UEIR BCF UEIR, CRC16EF RETURNCRC5_Host_Error BANKSEL UEIR BCF UEIR, CRC5EF RETURNPID_Check_Failure BANKSEL UEIR BCF UEIR, PIDEF RETURN; --------------------------------------------------------------------------------------------------------------------------------------
|
|
相关推荐
19个回答
|
|
|
只有在事务完成时才会得到TRNIF,事务意味着传输数据包(如SETUP、IN、OUT、DATA0/1、ACK/NAK/STALL)的过程。然后启动枚举过程以获取配置数据。它将使用端点零点(EP0)。它正在为这个设置过程使用Control Transfer……如果您没有正确地响应或回答它,过一会儿,主机将把USB线路设置为IDLE状态……
|
|
|
|
|
|
据我所知,第一个请求是从PC获得GETDEVICE描述符,WHOCH我应该得到同样的方法吗?因此,我插入它,我得到一个重置,然后活动,然后从PC请求:GET描述符?但我没有得到,所以我不能回答
|
|
|
|
|
|
你好,SunNICH2,你没有说明你的硬件。MSPICE有很多支持USB的芯片。从你的代码来看,它看起来像PIC18(抱歉不要使用这些)并实现一个设备(不是主机),但是什么类型?但是,作为一个指南,您对从主机发起事务是正确的,但是您必须“武装”端点以接收数据以及传输数据。可能是主人在尝试接收摊位或NAK。假设你的硬件/时间是正确的,我建议使用MLA解决方案,让它工作。然后你可以逆向工程到你的自定义设备。T Yorky
|
|
|
|
|
|
这里是枚举USB设备的Windows方式,USB堆栈如何枚举设备
|
|
|
|
|
|
我使用PIC16F1455/1459i端点设置为:(也在上面的代码)还是我在这里弄错了?MOVLW B'00010110';SETUP MOVWF UEP0 MOVWF UEP1bit 4的端点设置EPHSHK:端点握手启用位1=端点握手启用位0=端点握手禁用(通常用于等时端点)位3 EPCONDIS:双向端点控制位如果EPOUTEN=1和EPINEN=1:1=D可从控制传输获得的端点n;只有IN和OUT传输允许0=Enable Endpoint n for control(SETUP)传输;IN和OUT传输也允许2EPOUTEN:Endpoint Output Enable bit1=Endpoint n output enabled0=Endpoint n output.dbit1EPINEN:Endpoint Input Enable bit1=端点n输入enabled0=端点n输入禁用,0EPSTALL:端点STALL启用位(1)1=端点n停止0=端点n不停止,或者我错了吗?
|
|
|
|
|
|
我检查了一些我在网上找到的例子,我发现他们是如何设置的。对于UEP0-0x16,我的值是一样的,它的端点可能是正确的。你还有其他建议吗?
|
|
|
|
|
|
为什么不从这里开始呢?http://www.codeproject.com/Articles/830856/Micro.-PIC-F-USB-Stackhttps://github.com/.11/m-stack/pull/3http://www.microhip.com/pagehandler/en-us/devtools/mla/home.html。
|
|
|
|
|
|
多亏了bosco,代码项目计划对我帮助很大。我有145x的数据表,但是我想知道数据表中没有提到所有的功能,是否还有来自MicroChip的更详细的文档。我现在可以从PC机接收数据,但是我没有停留在这里。我将继续,可能找到一种方法。当我收到GetDeviceDescriptor时,我得到USTAT=0和BD0STAT=0x34。34不产生意义,而“30”应该读0,这些位不用。“4”的意思是“暂停”,但是我得到了数据。接下来我试着回复,但是添加所需的18个字节,在地址、计数和BD0STAT.UOWN中设置BDT。就在我重新武装Out缓冲区之前(与上面的示例中一样,只有UOWN没有DTSEN)。然后我得到一个SOF int,然后它就结束了。可能是我的消息没有发送,或者我的接收器BDT出错。我设置了地址,它有80个字节,所以应该有足够的空间。据我所知,一旦发送,我就应该得到发送的字节数,但是数据表并没有确切地告诉我如何发送。
|
|
|
|
|
|
你解释BDNSTAT的方式可能不正确。0x34是正确的。当针对端点OUT缓冲区清除(0)UOWN时,意味着您从主机获得了一些东西,所以比特<5:2>用于包ID.0x34->包ID=0b1101,它是一个SETUP包。在获得消息“GetDeviceDescriptor”之后,重新武装IN端点缓冲区,但是不是OUT……OUT表示从主机到设备的数据,IN表示从设备到主机的数据。因此,如果要向主机发送数据,请始终将数据放在IN缓冲区中。数据计数是
|
|
|
|
|
|
也许我没有解释清楚:我把OUT缓冲区(adr 2000-3)设置为UOWN(没有其他位),以便我的设备从主机/PC接收。我有0x80字节要接收。我设置我的IN缓冲区(2004-7,device=>PC)与消息/回复到PC,BDT与地址,计数,最后是UOWN(没有其他位),然后我希望把它发送到PC并发送更多给我。在这里,我得到了SOF,这就是它结束的地方。也许这解释得更好?
|
|
|
|
|
|
SOF只是一个帧信号的开始,实际上你不需要做任何事情,只要清除标志。
|
|
|
|
|
|
是的,但是我为什么不接收数据呢?SOF是最后一个动作,我不会第二次获得数据,也不会100%地发送数据。问题是:为什么我不在第二次接收数据?
|
|
|
|
|
|
端点数据传输的最重要标志是TrnIF。这意味着交易已经完成。当然,如果出现问题,我们检查其他标志。例如,如果getGetDeviceDescriptor,您将一些数据放入EP0_IN缓冲区,然后更新BD0STAT、BD0CNT,并在最后一步将UOWN设置为1,以便将控制转移到USB SIE。如果主机拾取数据,TRNIF应该在那之后设置。因此,基本上,如果数据还没有准备好,UOWN应该总是0,否则主机将拾取不需要的东西。
|
|
|
|
|
|
我是否理解正确,然后当我对TrnIF做出反应时,我应该在发送回复之前清除它(设置在UWON)?我在中断中发送我的答复,并把它作为最后一件事清理掉。我的0岁,直到我准备好了。
|
|
|
|
|
|
昨天,我使用USB监视器进行了测试,并获得了百万:PNP事件:设备连接(UP),01.02.2016:23:02: 34.810(1)。设备:未知)USB设备刚刚连接到系统.000001:PnP事件:惊喜消除(UP),01.02.2016 23:02:34.810+0.0(1。设备:未知)USB设备刚刚从系统断开。000002:PnP事件:设备断开(UP),01.02.2016 23:02:34.841+0.031(1。设备:未知)USB设备刚刚从系统中移除,所有驱动程序都卸载了。我还发现,它重置了我的设备3次,并发送了GetDeviceDecsriptor请求3次。即使我回复了它,我猜它也没有被发送。否则,我应该看到它,为什么我得到一个惊喜去除?这就是我对请求的回答。它是从TrnIF中断调用的。在调用这个中断之后,我清除中断标志。
|
|
|
|
|
|
您可以看一下这个文档,尤其是附加了另一个img的附录BI,它更像是一个真实的Windows场景,您可以看到,在SETUP包之后,主机(Windows)将启动IN传输,通常设备不能立即响应,所以它将与NAK一样,一旦你把数据放在IN缓冲区中,它就和AK和数据一样。首先,它只是一个8字节的数据请求,地址0用于确认(虽然SETUP包中是0x40),所以它不会请求更多的数据,并且发送一个具有零长度数据的OUT包来结束控制传输。用它发送太多的数据。我不知道这没问题。顺便说一下,你可以考虑把EP0输入/输出所有8个字节,这是足够好的全速装置。大多数示例都使用8字节……如附录B所示,如果可以遵循示例中所示的所有传输,那么Windows应该能够识别您的设备。
|
|
|
|
|
|
IGHGTTPS://Delv.GoGoLe.com/Onter?ID= 0B-TPRDQYFRKQS1NHYUTPUTHPVXM
|
|
|
|
|
|
我试过总线分析器,发现我从来不向主机发送任何数据。我设置了地址、计数和USTAT=UOWN。位于2004年7月7日,应该发送数据正确吗?我的总线分析仪没有看到任何来自我的设备的流量。然而,我得到GETO-DEVICEX描述符并试图回答。有什么想法我不能发送?我试过有没有DTSN,这个软件和我最近一篇文章中的软件完全一样。
|
|
|
|
|
|
除非您已经更改了设备包括,UOWN和其他设备表示位位置,并且被设计为与bcf/bsf一起使用,例如您也可以像这样使用它们:您现在使用它的方式将不起作用。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:41 , Processed in 1.090641 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
497