打印

敬请斑竹解开菜农usb之isp疑虑

[复制链接]
5352|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2010-10-9 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自 2楼
X-Hawk| | 2010-10-10 02:06 | 只看该作者
hot大侠,这个问题想展开讨论:

1. 华邦芯唐的isp, USB的确不是盘符,被做成HID(人体学输入设备), 这个在windows上自然支持,可以免装第三方驱动。

2. "运行状态"下,可以将flash虚拟成U盘,有现成的代码可以试。找到
http://www.nuvoton.com/NuvotonMO ... 7-91b2-221afeddd575
下的NUC100SeriesBSP_CMSIS_v1.02.002.zip, 其中有个Smpl_UDC, 就是虚拟U盘的例子,
可以替换自己想要的任何存储介质。
另外还有两个例子:Smpl_HID, USB人体学设备的例子,易于用来实现USB通讯。
Smpl_FMC,读写内部flash的例子。要在此基础上实现ISP, 相信对hot大侠是小儿科了。

其中也有若干疑点请不吝赐教:

1. lpc1343的usb isp是否在“运行状态”也支持呢?还是和华邦芯唐一样,有另外的“isp状态”?
比较奇特的是,lpc1343将usb虚拟成盘符,如果这个在“运行状态”也支持,
必然要占用usb和系统资源,比如USB端点、中断等。这样用户其他的usb例程恐怕就需要夹杂在一起维护了,不知道lpc这个isp如何提供给客户的?提供代码让用户自己去改吗?

2. 虚拟U盘的方式不太好,多一个盘符之外,
    还有需要超级权限问题,
    还有应用程序发送给U盘的scsi命令数据,各版windows允许通过的不一样,要支持多版windows比较困难。lpc使用的什么命令呢?

使用特权

评论回复
来自 3楼
X-Hawk| | 2010-10-10 20:20 | 只看该作者
isp固件和“用户程序” 都能控制芯片复位,
并都能通过寄存器ISPCON.BS位,控制复位时,从 “isp固件” 还是 “用户程序” 进行启动。

软件复位到“isp固件”之前,可写特殊的复位标志寄存器,让复位后运行的“isp固件”进入isp状态。
具体的说就是RSTSRC.POR位,意思为power on reset, 在初次上电时,会自动置1。软件reset之前,
将其改为0。这样"isp固件”就有判断依据了。
目前的固件是否进入"isp状态“, 除了判断pb15之外,RSTSRC.POR也是一个判断条件。
所以hot大侠不必担心。
-------------------------------------------------------------------------------------------------

但是对hot大侠的办法仍旧有疑虑,因为这样USB插上强制进入isp状态,
对于某些应用,完全靠USB供电并启动,就无法直接启动到"用户程序"了

使用特权

评论回复
地板
hotpower|  楼主 | 2010-10-9 19:36 | 只看该作者
自己顶一下

使用特权

评论回复
5
X-Hawk| | 2010-10-9 20:59 | 只看该作者
bingo! 完全正确,hot大侠的表述没看出问题啊~
“运行期间” usb归运行的程序管。isp期间usb归isp固件管,不矛盾。

使用特权

评论回复
6
6019赵文| | 2010-10-9 21:18 | 只看该作者
:victory: 学习了

使用特权

评论回复
7
hotpower|  楼主 | 2010-10-9 21:42 | 只看该作者
在lpc1343中,也有usp的isp能力,不过它实现的方法是将flash程序空间虚拟为一盘符。
在华邦的isp应用程序中,usb应该不是被虚拟成盘符,应该为一设备。
假如插入usb后,先进入isp状态。
在下载完程序回到运行状态后,还能将运行状态中系统内的外接nand flash虚拟成u盘吗?
俺对usb协议了解甚少,望斑竹能给俺解答之,谢谢!

使用特权

评论回复
8
hotpower|  楼主 | 2010-10-10 08:57 | 只看该作者
非常非常感谢斑竹!
首先别称什么“大侠”,俺现在菜鸟不称不上,只是选型阶段,想深入了解以便于设计。
至于lpc1343的usb bootloader,俺也是听朋友简单所述,没深入了解。它虚拟成U盘是有些问题。

本主题的讨论:
首先,若采用unc120或unc140带usb设备的芯片,肯定能和PC通讯。
但是在实际应用中,可能要遇到一些问题,俺对usb协议没深入了解和具体应用过,所以存在许多疑问是自然的。

首先根据isp应用软件的要求,有个加载和运行过程之分,故应用了PB.15的电平信号来具体区分。
说些usb外行的话:
假若PB.15=0,那么此时PC与nuc120通讯,自然可以进入isp状态。
所以会存在nuc120的IO即PB.15的控制和时机问题。
假若此时PC识别为HID设备,那么isp结束后,假若PB.15此时为1,由于PC已经识别或枚举过,难道PC可以二次识别吗?

虽然俺不清楚PC和USB设备的内情,但俺觉得这是二次过程,即必须再将USB拔下来重新识别,而且这次需要PB.15=1的配合。

不知俺理解或描述的妥当否?
今天俺补习补习usb协议,免得总说笑话。

谢谢斑竹能继续为菜农解惑,此问题可能也是其他网友需要知道的。

衷心感谢!!!

使用特权

评论回复
9
hotpower|  楼主 | 2010-10-10 09:00 | 只看该作者
再:
斑竹提供的链接俺已下载了两天都没成功,其他都可以,不知为何?
http://www.nuvoton.com/NuvotonMOSS/Community/ProductInfo.aspx?tp_GUID=7052964b-b71b-46b7-91b2-221afeddd575

使用特权

评论回复
10
X-Hawk| | 2010-10-10 10:45 | 只看该作者
非常非常感谢斑竹!
俺觉得这是二次过程,即必须再将USB拔下来重新识别
hotpower 发表于 2010-10-10 08:57


别谦虚啊,大侠功力非常深厚,俺在你面前恐怕连小学生都不如。
USB略知一点,因为正好做到这一块,事有凑巧。。。。

这个“二次过程”,的确需要将USB拔下,拔下动作可以软件模拟,
设置USB到SE0状态(D+,D-信号线上值都为0),保持一定时间,例如15毫秒左右,windows就认为USB拔下了。
然后退出SE0状态,就自然开始“二次过程”了。

使用特权

评论回复
11
hotpower|  楼主 | 2010-10-10 12:06 | 只看该作者
谢谢斑竹!
问题已经聚焦,现在只剩下usb如何正确地进入isp或运行状态了。
先将俺不成熟的想法提出:
由于比状态需要pb.15和reset两线支持。
这个想法可能需要得到isp应用程序的支持。
在nxp中,只要reset信号从低电平跳变到高电平的瞬间,若ispen(华邦的pb.15)为低电平时,就会掉入isp状态。除非复位否则不会回到运行状态。
特别注意:在isp期间,ispen信号的任何变化都不会改变此时的isp工作状态。
假若华邦的isp都具备这些,其应用软件加一软件复位钮时:
用74hc123实现双路单稳态电路,来分别控制nuc120的reset和pb.15。
将usb的vbus即电源接一npn三级管后做为比两路的单稳时钟源。
由于无usb即vbus=0,npn不会导通,故reset和pb.15都为高电平。
插入usb即vbus=1时,retset和pb.15同时为0。
由于是单稳态电路,且两个信号的延时脉冲宽度不同(ispen宽),这样就保证了进入isp状态,而且是一次(只要不再插拔usb)。
在isp完成后回到运行状态时,reset和ispen早已跳变为高电平了。

此方法就是俺构思的“自动usb之isp”

手机打字太累…

使用特权

评论回复
12
hotpower|  楼主 | 2010-10-10 17:16 | 只看该作者
本帖最后由 hotpower 于 2010-10-10 17:37 编辑

请斑竹删除之,晕!手机发帖太倒塌!

使用特权

评论回复
13
hotpower|  楼主 | 2010-10-10 17:35 | 只看该作者
这个由npn三级管 74hc123组成的自动一次性进入isp状态的构思是成立的,但最怕isp应用软件中的链接按钮内部再发送一条使nuc120复位的命令。
因为该电路是在usb线插入主机的瞬间(mS级)一次性完成进入isp状态的。
此时pb.15早已随reset信号的升高而升高。
故此时isp应用软件若再复位肯定就不会进入isp状态。
假若事实确实是如此,那么此电路只能将pb.15改为usb插入主机后恒为低电平。
即不拔掉usb将永远回不到运行状态。

这就是俺对华邦的isp应用软件最大的担忧。

不过这不牵扯到nuc120中4k的isp固件的改动。

谢谢斑竹能继续为菜农解忧。
因为俺现在无任何硬件,只能胡思乱想了。

使用特权

评论回复
14
hotpower|  楼主 | 2010-10-10 20:51 | 只看该作者
斑竹的疑虑就是菜农自己的疑虑!但如何不拆壳自动进入isp确实不好解决,如何是好?

使用特权

评论回复
15
hotpower|  楼主 | 2010-10-11 14:13 | 只看该作者
如何是好?

使用特权

评论回复
16
hotpower|  楼主 | 2010-10-11 18:31 | 只看该作者
搞的人太少,交流都难…

使用特权

评论回复
17
X-Hawk| | 2010-10-11 19:50 | 只看该作者
也想不出办法。除非能软件通过USB控制reset和pb15拉高过低,近乎不可能的事情。

如果,俺只是说如果呢。。程序保证不出错,就还有办法。(这个方案在讨论中,咱只是一个旁观者):
1. isp工具写完"用户程序"并验证正确后,写一个"特殊标志"
2. isp工具擦除"用户程序"时,一定会擦除这个 "特殊标志"
3. isp固件在没有检测到这个"特殊标志"时,会进入isp模式。
    在isp固件检测到pb15没被拉低、并且发现不是“用户程序”重新引导而来、并且验证“特殊标志”正确,
    才会引导到“用户程序”。
这种情况下,软件可以控制从"isp状态"和"用户程序"状态互相切换,完全不需要手工参与。

使用特权

评论回复
18
3B1105| | 2010-10-11 21:36 | 只看该作者
关注中

使用特权

评论回复
19
hotpower|  楼主 | 2010-10-11 21:54 | 只看该作者
谢谢斑竹!
有点难。我说的电路是可以满足一次usb插入时进入isp的,但它的缺点是每次都被强迫进入。假若不想isp下载程序,则必须借助isp应用软件做一次放弃,即nuc120复位才能回到运行状态中进行usb通讯。

使用特权

评论回复
20
hotpower|  楼主 | 2010-10-12 10:17 | 只看该作者
希望斑竹继续。随后贴三张图来讨论。由于产品出线的问题,只能有usb端口与外接通讯。而四线usb本无控制功能,只能在vbus上下功夫。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝