xiaobenyi 发表于 2010-12-29 10:52:40

最近突发奇想,把USBasp和USB-Blaster整到一起去了,自我感觉良好

最近突发奇想,把 USBasp 和 USB-Blaster 整到一起去了, 先上图

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607789BIGI65.jpg
(原文件名:DSC00177.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607790MCB1ZK.jpg
(原文件名:DSC00178.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607791TPMPEQ.jpg
(原文件名:DSC00172.jpg)

当然第一步就是代码移植,目前还没有非AVR平台的USBasp,也没有AVR平台的USB-Blaster.
想来想去,还是把USBasp的代码移植到别的平台比较合适,毕竟USB-Blaster速度比较快,变成了低速设备,不太好.
因为之前已经把USB-Blaster移植到了C8051F的平台下,所以这次就决定把USBasp也移植到C8051F的平台下.

移植的过程不算很顺利,非常佩服德国人的代码,用AVR单片机模拟USB接口,而且把代码写成了万能模板.足足花了我一周的时间,才终于移植成功.
调试的时候才发现了几个智峰软件跟德国原版的差别(当然还有别的我不知道的差别),一个是在Connect的时候,智峰软件指定了SCK的速度,而不是把连接命令和设定速度分开,另一个是增加了提供时钟的功能,这点是在连接还是在使能编程模式的命令里面加的我就不记得了,都是用USBlyzer抓出来的数据.

移植后的源代码ourdev_607812EGCDTQ.rar(文件大小:101K) (原文件名:Firmware-USB-ASP.rar)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607813LYPQT1.gif
硬件平台电路图(原USB-Blaster的图) (原文件名:无标题.gif)

这个电路是以前把USB-Blaster移植过去的时候画的,2脚是接地的,所以直接上USBasp还不行,于是就有了开始那几张惨不忍睹的飞线图.

接下来是固件整合在一起,并且要切换,这点确实很头疼.
切换的方法,是一件很头疼的事情,我肯定不会用跳线来跳,也不会用拨码开关,这些都显得太山寨了,呵呵
用上位机软件来切换又比较麻烦(实际情况是我还不会,呵呵),最好就是自动切换了,插上什么板子,就切换到什么模式

可是说起来容易,做起来还真不容易,USBasp的2脚要给目标板供电,而USB-Blaster的2脚是接地的,所以2脚该不该供电就成了一个问题.
还有就是如何识别目标板子是CPLD还是AVR,接口差别可以说只在2脚和4脚上,可以通过这两个脚的状态来识别,可是这又牵涉到目标板有没有上电的问题,如果没上电的话,就体现不出差别来.
这期间折腾了很久,曲折的过程就不说了,最后决定,如果目标板没上电(表现为2脚和4脚都为低电平),那就给2脚加一下电(不过要限流,否则USB过流就挂了),如果加电之后2脚电平就上去了,那就是AVR,反之就是CPLD.
原以为这样就OK了,调试时才发现,远不止这么简单,还有带电拔掉板子,不带电拔掉板子,然后再插上带电或者不带电的新板子,还有原先不带电的板子,插上后再上电的,还有不需要下载线供电的AVR板子......好多次想放弃这样的想法,直接用拨码开关得了
最后冷静下来,把能想到的情况都列出来,竟然有16种之多,整理归类之后,也就理清了.
最后再加上插拔电缆的时候的防抖动,结果就是以下的代码.

void DetectConfigue()
{
        bit PowerUB=PIN4,PowerUA=PIN2;
        BYTE Retry=10;
        while(Retry--)
        {
                Delay_Main();
                if((PowerUB!=PIN4)||(PowerUA!=PIN2)) return;
        }
       
        if(!(PowerUB|PowerUA))// Target not powered
        {
                if(Configue!=USB_BLASTER)
                {
                        POWER_TAR = PON;
                        Delay_Main();
                        if(!PIN2) // Power Failed
                        {
                                POWER_TAR = POFF;
                                SelectConfig(USB_BLASTER);
                        }
                        else
                        {
                                if(Configue==USB_ASP) return;
                                SelectConfig(USB_ASP);
                        }
                }
                else
                        POWER_TAR = POFF;
        }
        else if(!PowerUB)   // USB_asp
        {
                if(Configue==USB_ASP) return;
                SelectConfig(USB_ASP);
        }
        else if(!PowerUA)   // USB_Blaster
        {
                POWER_TAR = POFF;
                if(Configue==USB_BLASTER) return;
                SelectConfig(USB_BLASTER);
        }
        else            // Not Connect
        {
                POWER_TAR = POFF;
                if((Configue!=USB_BLASTER)&&(Configue!=USB_ASP))
                        SelectConfig(USB_BLASTER);
        }
}

目前测到算是稳定了,唯一的缺陷在于,之前不需要下载器供电的AVR板子如果想下载线给他供电,就得拔掉重插.这种情况应该是少之又少.

下面是工作台的乱象.

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607820JA1LPQ.jpg
(原文件名:DSC00180.jpg)

pangfen 发表于 2010-12-29 10:58:22

顶顶顶!

yuzr 发表于 2010-12-29 10:59:26

mark

flywater 发表于 2010-12-29 11:12:45

支持,学习了,有空也搞一个玩玩....

plc_avr 发表于 2010-12-29 11:24:58

不错。。。。。。。。。。。

renpeng009 发表于 2010-12-29 11:53:15

现在AVR、FPGA都是用并口,有空我也做个玩玩!

liurangzhou 发表于 2010-12-29 13:30:53

mark,期待USB-Blaster程序

largeboss 发表于 2010-12-29 14:52:15

顶顶顶!

kilyh 发表于 2010-12-29 16:08:13

回复【楼主位】xiaobenyi
-----------------------------------------------------------------------

标记,有空自己做一个回来玩玩!

pygh 发表于 2010-12-29 16:59:31

Mark

rlogin 发表于 2010-12-30 00:01:27

嗯,不错,好东西

wxx116zh 发表于 2010-12-30 08:28:42

mark,好东西。

minier 发表于 2010-12-30 08:44:44

佩服楼主!不过有两个疑问:
1、您的USBASP支持S51和S52吗?
2、您的USBASP支持自动调速吗?

xiaobenyi 发表于 2010-12-30 09:49:38

回复【12楼】minier
-----------------------------------------------------------------------

这个USBasp是按最新的USBasp固件改的,支持自动调速
在调试的时候抓USB数据包,因为开始不顺利,抓到的智峰软件发的Connect命令包,后面紧跟一个EnterProgramMode的命令包
一开始程序不对,所以总会失败,我发现失败的时候这两个命令会重发7次,每次Connect带的参数都在递减,说明Connect命令里面带了调速的命令,于是就把固件改了

        switch(Setup.bRequest)
        {
        case USBASP_FUNC_CONNECT:
                ispSetSCKOption(Setup.wValue.i);
                AddrModeDW = 0;
                ispConnect();
                ispEnableClock(Setup.wIndex.i);
                DataSize = 0;
                EP0_Status = EP_TX;
                break;

这个就是Connect命令的处理,楼主位里面有源代码的,Setup包的wValue就是速度信息,wIndex决定是否提供时钟

至于是否支持S51和S52,我没测过,不过支不支持是由上位机软件决定的,应该没有问题,改天测一下,呵呵

xiaobenyi 发表于 2010-12-30 09:52:08

昨天又发现一个切换的问题,就是在插上目标板的时候,如果速度慢了,要求供电的AVR板子会被认为是不需要供电的板子
估计是4脚先接地了,而2脚还是悬空的,就被判断成这样了,速度快点就没问题

还得改,苦啊,就这么个问题,折腾死了

liurangzhou 发表于 2010-12-30 10:06:11

期待USB-Blaster程序

zhifeng 发表于 2010-12-30 10:07:49

progisp 自动调速,输出解锁时钟,选择cpu类型的协议见下面的程序。这样,不用抓包了,呵呵!

    if(data == USBASP_FUNC_CONNECT)
    {
            ispConnect(data,data);      //data=speed,data=cpu type
            if(data==1)                      //data= out clock
                init_6M();
      ledRedOn();

      data = pgm_read_byte(0x1ffb);       //read serial   
      data = pgm_read_byte(0x1ffc);
      data = pgm_read_byte(0x1ffd);
      data = pgm_read_byte(0x1ffe);
      len = 4;
    }

自行修改usbasp固件,就可以让progisp支持了。

xiaobenyi 发表于 2010-12-30 10:28:04

回复【16楼】zhifeng
-----------------------------------------------------------------------

感谢!感谢!

有个 cpu type,看来支不支持S51还是个未知数

原来这里还读了序列号,我说怎么Setup.wLength=4,而德国固件只回复了一个空包.

目前还只测了MEGA48和2313,各种功能都试了一下,还不小心把我的MEGA48给锁死了,郁闷

byin 发表于 2010-12-30 10:28:29

mark

xiaobenyi 发表于 2010-12-30 10:37:17

回复【6楼】liurangzhou
-----------------------------------------------------------------------

回复【15楼】liurangzhou
-----------------------------------------------------------------------

您已经期待了两次了,呵呵
不过由于某些XX原因,USB-Blaster的程序我暂时不想公开

xiaobenyi 发表于 2010-12-30 17:26:40

终于决定放弃自动判断自供电和下载线供电的AVR板子
测试很久,终于发现AVR的低功耗不是吹的,一个50uA的上拉电流,就能把电源拉到2V
智峰的那个用软件开设定是否供电看起来是个不错的选择

byin 发表于 2011-1-23 01:14:08

学习了

p2pahz 发表于 2011-4-27 16:09:12

学习了,楼主强

zhanghewei0809 发表于 2013-1-11 21:41:53

期待USB-Blaster程序

xwkm 发表于 2014-5-8 13:46:45

来Mark一下。顺带问一下,支持AS和PS模式吗?
页: [1]
查看完整版本: 最近突发奇想,把USBasp和USB-Blaster整到一起去了,自我感觉良好