搜索
bottom↓
回复: 24

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

[复制链接]

出0入0汤圆

发表于 2010-12-29 10:52:40 | 显示全部楼层 |阅读模式
最近突发奇想,把 USBasp 和 USB-Blaster 整到一起去了, 先上图


(原文件名:DSC00177.jpg)


(原文件名:DSC00178.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)

硬件平台电路图(原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板子如果想下载线给他供电,就得拔掉重插.这种情况应该是少之又少.

下面是工作台的乱象.


(原文件名:DSC00180.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-12-29 10:58:22 | 显示全部楼层
顶顶顶!

出50入0汤圆

发表于 2010-12-29 10:59:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 11:12:45 | 显示全部楼层
支持,学习了,有空也搞一个玩玩....

出0入0汤圆

发表于 2010-12-29 11:24:58 | 显示全部楼层
不错。。。。。。。。。。。

出0入0汤圆

发表于 2010-12-29 11:53:15 | 显示全部楼层
现在AVR、FPGA都是用并口,有空我也做个玩玩!

出0入0汤圆

发表于 2010-12-29 13:30:53 | 显示全部楼层
mark,期待USB-Blaster程序

出0入0汤圆

发表于 2010-12-29 14:52:15 | 显示全部楼层
顶顶顶!

出0入0汤圆

发表于 2010-12-29 16:08:13 | 显示全部楼层
回复【楼主位】xiaobenyi
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-12-29 16:59:31 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-12-30 00:01:27 | 显示全部楼层
嗯,不错,好东西

出0入0汤圆

发表于 2010-12-30 08:28:42 | 显示全部楼层
mark,好东西。

出0入0汤圆

发表于 2010-12-30 08:44:44 | 显示全部楼层
佩服楼主!不过有两个疑问:
1、您的USBASP支持S51和S52吗?
2、您的USBASP支持自动调速吗?

出0入0汤圆

 楼主| 发表于 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,我没测过,不过支不支持是由上位机软件决定的,应该没有问题,改天测一下,呵呵

出0入0汤圆

 楼主| 发表于 2010-12-30 09:52:08 | 显示全部楼层
昨天又发现一个切换的问题,就是在插上目标板的时候,如果速度慢了,要求供电的AVR板子会被认为是不需要供电的板子
估计是4脚先接地了,而2脚还是悬空的,就被判断成这样了,速度快点就没问题

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

出0入0汤圆

发表于 2010-12-30 10:06:11 | 显示全部楼层
期待USB-Blaster程序

出0入0汤圆

发表于 2010-12-30 10:07:49 | 显示全部楼层
progisp 自动调速,输出解锁时钟,选择cpu类型的协议见下面的程序。这样,不用抓包了,呵呵!

    if(data[1] == USBASP_FUNC_CONNECT)
    {
            ispConnect(data[2],data[3]);        //data[2]=speed,data[3]=cpu type
            if(data[4]==1)                      //data[4]= out clock
                init_6M();
        ledRedOn();

        data[0] = pgm_read_byte(0x1ffb);       //read serial   
        data[1] = pgm_read_byte(0x1ffc);
        data[2] = pgm_read_byte(0x1ffd);
        data[3] = pgm_read_byte(0x1ffe);
        len = 4;
    }

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

出0入0汤圆

 楼主| 发表于 2010-12-30 10:28:04 | 显示全部楼层
回复【16楼】zhifeng
-----------------------------------------------------------------------

感谢!感谢!

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

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

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

出0入0汤圆

发表于 2010-12-30 10:28:29 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-30 10:37:17 | 显示全部楼层
回复【6楼】liurangzhou
-----------------------------------------------------------------------

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

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

出0入0汤圆

 楼主| 发表于 2010-12-30 17:26:40 | 显示全部楼层
终于决定放弃自动判断自供电和下载线供电的AVR板子
测试很久,终于发现AVR的低功耗不是吹的,一个50uA的上拉电流,就能把电源拉到2V
智峰的那个用软件开设定是否供电看起来是个不错的选择

出0入0汤圆

发表于 2011-1-23 01:14:08 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-4-27 16:09:12 | 显示全部楼层
学习了,楼主强

出0入0汤圆

发表于 2013-1-11 21:41:53 | 显示全部楼层
期待USB-Blaster程序

出0入0汤圆

发表于 2014-5-8 13:46:45 | 显示全部楼层
来Mark一下。顺带问一下,支持AS和PS模式吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表