whimsyB 发表于 2013-3-9 18:30:47

用官方移植的VUSB-sample注意事项

本帖最后由 whimsyB 于 2013-3-9 20:09 编辑

Readme文件提示:
LGT8F08A      VUSB
----------------------
PB0        =>         DP
PB1        =>         DM
INT0        =>         DP
PA0        =>         LED

这个是针对SOP28封装的,如果用ssop24,要注意,PA0的引脚是跟Int0在一起的,所有要把LED脚安排到其他脚上做测试

usb模拟方案,下载官方的hex到芯片,插到电脑不能正常枚举设备,说明程序工作异常,测量xtal1,xtal2脚无波形,判断外部时钟没有震荡
后查询1.6.5数据手册PMCR寄存器说明,发现如下2行关键描述:

工程样品LGT8F08A-16C,为0时,禁用外部晶振,默认为0
其他所有LGT8F0XA型号,为1时,禁用外部晶振,默认为0

对应的寄存器位: OSCMEM

修改示例代码为:
        PMCR = (1 << RC16MEN) | (0 << OSCMEN) | (1 << EXTMSEL);
到此正常。

当然如果你要用内部的RC16MHz来替代外部晶振,那么就要想办法校准RC

xwkm 发表于 2013-3-9 19:46:38

DP其实只要一个脚就行的。PD2/PA1/INT0
DM随便找那个PORTD的脚。我目前用的是PD4.
感觉用3个脚的设计没必要。
除非是为了用PWM/ICP。

whimsyB 发表于 2013-3-9 20:15:08

看示例的电路图,有的确实没接,到底接不接int0会有什么区别,我没仔细研究过,如果楼上的兄弟研究过,不妨跟我们说说

xwkm 发表于 2013-3-9 21:13:27

whimsyB 发表于 2013-3-9 20:15 static/image/common/back.gif
看示例的电路图,有的确实没接,到底接不接int0会有什么区别,我没仔细研究过,如果楼上的兄弟研究过,不妨 ...

INT0脚是必须接的。因为V-USB靠INT0脚进入中断。INT0一定要接D+/D-。
其他的口就随便了。
我个人喜欢
PD2/INT0 =>D+
PD4 => D-

Yawgmoth 发表于 2013-3-12 15:51:47

1,INT0必须接。2,d-和d+在一组接口里。3,别忘了切到外晶振

whimsyB 发表于 2013-3-13 21:48:01

Yawgmoth 发表于 2013-3-12 15:51 static/image/common/back.gif
1,INT0必须接。2,d-和d+在一组接口里。3,别忘了切到外晶振

准确的地说,应该接个外部中断引脚,你看下范例的那个tiny45-rc.png, 就是接到int1的, 我开始就是因为看到这个图,还以为没接int0,实际上还是需要中断脚

goodcode 发表于 2013-3-18 13:44:27

我用lgt移植的vusb需要插入些nop, 否则通讯时会有错误的数据内容. 可能我用的12m晶振太山寨了.

分析vusb可以用逻辑分析仪配合闲置的io来分析

还有个问题也不知道我修正的对不对在usbdrvasm12.inc中;原始LGT 移植代码 此处可能会引起错误当开启USB_COUNT_SOF, USB_SOF_HOOK或者电平错误时将导致死循环或不执行代码
;通过增加新寄存器变量修正
waitForJ:
    inc   YL
    in                x5,         USBIN
    sbrs    x5,         USBMINUS
    brne    waitForJ      ; just make sure we have ANY timeout
waitForK:
;The following code results in a sampling window of 1/4 bit which meets the spec.
    in                x5,         USBIN
    sbrs    x5,         USBMINUS
    rjmp    foundK
    in                x5,         USBIN
    sbrs    x5,         USBMINUS
    rjmp    foundK
    in                x5,         USBIN
    sbrs    x5, USBMINUS
    rjmp    foundK
    in                x5,         USBIN
    sbrs    x5,         USBMINUS
    rjmp    foundK
    in                x5,         USBIN
    sbrs    x5,         USBMINUS
    rjmp    foundK
#if USB_COUNT_SOF
    lds   YL, usbSofCount
    inc   YL
    sts   usbSofCount, YL
#endif/* USB_COUNT_SOF */
#ifdef USB_SOF_HOOK
    USB_SOF_HOOK
#endif
    rjmp    sofError
foundK:

vows 发表于 2013-3-18 15:06:41

我用官方的代码,换了5台笔记本试用,有一台不识别。

whimsyB 发表于 2013-3-19 00:32:27

本帖最后由 whimsyB 于 2013-3-19 00:34 编辑

vows 发表于 2013-3-18 15:06 static/image/common/back.gif
我用官方的代码,换了5台笔记本试用,有一台不识别。

估计你没有用3.3V的LDO吧,建议用LDO来产生3.3V,不要用2个二极管串接
用3.3VLDO后,D+,D-串接的电阻可以改小


具体的分析,印象中 马超老师写的一篇文章,比较具体的测试了不同的usbasp外围电路对稳定性的影响,你找找

vows 发表于 2013-3-20 09:32:59

whimsyB 发表于 2013-3-19 00:32 static/image/common/back.gif
估计你没有用3.3V的LDO吧,建议用LDO来产生3.3V,不要用2个二极管串接
用3.3VLDO后,D+,D-串接的电阻可以 ...

用了,上面LDO,钽电容,ESD防护都有。Intel的电脑可以识别,连接Hub后也可以识别。那款不支持的电脑是AMD芯片组,应当是VUSB的时序还是有问题。

whimsyB 发表于 2013-3-20 23:12:43

amd的芯片组确实不太好用,我之前也用这个模拟USB来做读卡器的,发现amd芯片组usb设备能枚举成功,但是经常读卡失败

xwkm 发表于 2013-3-21 18:43:35

本帖最后由 xwkm 于 2013-3-21 18:44 编辑

goodcode 发表于 2013-3-18 13:44 static/image/common/back.gif
我用lgt移植的vusb需要插入些nop, 否则通讯时会有错误的数据内容. 可能我用的12m晶振太山寨了.

分析vusb可 ...

没错。YL寄存器最好别随便用。
另外就是不能直接 sbic,否则会死机。
CONT_SOF只能去把那个IN指令的寄存器改成别的没有用的。
不过记住在进中断前push寄存器。
另外新的LGT8F88A据称可以直接sbic.那么inc yl指令可以全部替换成NOP.

xwkm 发表于 2013-3-21 18:45:15

whimsyB 发表于 2013-3-20 23:12 static/image/common/back.gif
amd的芯片组确实不太好用,我之前也用这个模拟USB来做读卡器的,发现amd芯片组usb设备能枚举成功,但是经常 ...

为啥我的AMD系统没有任何问题呢?

goodcode 发表于 2013-3-21 21:05:31

我这4块785板子没啥问题

xwkm 发表于 2013-3-23 22:49:22

goodcode 发表于 2013-3-21 21:05 static/image/common/back.gif
我这4块785板子没啥问题

中断开始的时候要push x5。否则用户数据会乱掉。

whimsyB 发表于 2013-3-30 23:13:54

xwkm 发表于 2013-3-23 22:49 static/image/common/back.gif
中断开始的时候要push x5。否则用户数据会乱掉。

看楼上的这位老兄对模拟的usb很有研究,我想改个能用13.56M晶振的,不知道如何下手,能否讲解下不同的晶振,对应的inc文件要怎么改的原理

avr的汇编没好好的看过,所以看inc文件,感觉茫然

xwkm 发表于 2013-3-30 23:23:11

whimsyB 发表于 2013-3-30 23:13 static/image/common/back.gif
看楼上的这位老兄对模拟的usb很有研究,我想改个能用13.56M晶振的,不知道如何下手,能否讲解下不同的晶 ...

首先你要算出来相对与1.5M的周期。16M的移植是靠时差来进行的。用一次长一次短来避免滑动。
至于13.56M的你要看看偏差有多大,如果在允许的范围内还是可以的。
13.56/1.5=9.04,那么基本上每发3B都要稍微错开点,避免滑动,具体看16M/20M里面的注释,

whimsyB 发表于 2013-4-2 00:25:56

本帖最后由 whimsyB 于 2013-4-2 00:53 编辑

xwkm 发表于 2013-3-30 23:23 static/image/common/back.gif
首先你要算出来相对与1.5M的周期。16M的移植是靠时差来进行的。用一次长一次短来避免滑动。
至于13.56M的 ...


按照13.5M来算,刚好是1.5M的9倍,13.56M都在13.5M的1%误差内,应该还是可以的

虽然暂时不理解你说的滑动,还有3B又是怎么算的,,但是还是非常感谢你的回复

goodcode 发表于 2013-4-2 12:24:38

楼主可以看看 usbtiny http://dicks.home.xs4all.nl/avr/usbtiny/ 感觉比vusb易读

xwkm 发表于 2013-4-2 13:06:40

goodcode 发表于 2013-4-2 12:24 static/image/common/back.gif
楼主可以看看 usbtiny http://dicks.home.xs4all.nl/avr/usbtiny/ 感觉比vusb易读

USBtiny接口没有VUSB方便。所以我更喜欢用VUSB。

goodcode 发表于 2013-4-2 13:28:28

精简了一些东西当然体积也就精简了
例如把USBasp转到usbtiny还是很容易的

whimsyB 发表于 2013-4-6 23:51:44

看来楼上的二位都是高手,膜拜一下,

usbdrvasm12.inc, 能否通过插入nop指令,配合示波器来调整实现13.56M晶振的工作?

goodcode 发表于 2013-4-7 13:46:28

我觉得从usbdrvasm16.inc移植到13.56更容易些

whimsyB 发表于 2013-5-26 13:18:57

goodcode 发表于 2013-4-7 13:46 static/image/common/back.gif
我觉得从usbdrvasm16.inc移植到13.56更容易些

兄弟,能否进一步做个修改原理指导啊

goodcode 发表于 2013-5-27 17:01:16



里面比较好的文档
USB in a Nutshell.pdf
图解USB协议.pdf
NRZI编码.pdf

其实理解了NRZI编码 avr部分就是在凑指令数 指导实在伤不起{:lol:}

whimsyB 发表于 2013-6-1 11:24:45

goodcode 发表于 2013-5-27 17:01 static/image/common/back.gif
里面比较好的文档
USB in a Nutshell.pdf
图解USB协议.pdf


收到,谢谢

iamdais 发表于 2015-2-15 23:54:12

whimsy大哥,能给个邮箱跟你探讨一下用mega8内部比较器做125K读卡器吗?我也搭了一个电路,但是距离很近,没有3~5cm,不知道哪里出问题了。

whimsyB 发表于 2015-3-2 19:30:36

iamdais 发表于 2015-2-15 23:54
whimsy大哥,能给个邮箱跟你探讨一下用mega8内部比较器做125K读卡器吗?我也搭了一个电路,但是距离很近, ...

有什么问题,可以在这里提出,一起讨论下

你现在的距离大概有多少? 你用什么卡,线圈的外观长宽是多少的呀,卸载匹配是否对了?

iamdais 发表于 2015-4-21 17:25:21

whimsyB 发表于 2015-3-2 19:30
有什么问题,可以在这里提出,一起讨论下

你现在的距离大概有多少? 你用什么卡,线圈的外观长宽是多少 ...

加了个低通滤波可以了
页: [1]
查看完整版本: 用官方移植的VUSB-sample注意事项