10512|17

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STLinkII做的OpenOCD工具 [复制链接]

很久前就测试完成了,可以使用OpenOCD做编程调试操作:

OpenOCD介绍:OpenOCD可以理解为JTAG调试的上位机,可以支持一些低成本的硬件,比如并口和FT2323的JTAG Dongle,USBprog。由于其是开源的工具,所以可以自己开发JTAG调试工具,只需在OpenOCD源代码的src/jtag目录下,增加自己的驱动,并编译入OpenOCD就可以了
目标芯片可以支持Arm7,Arm9,Cortex-m3等芯片的编程和调试。

命令介绍(demo程序控制GPIOB口,驱动LED):
stm32x mass_erase 0:擦除Flash Sector 0
flash write_image demo.bin 0x08000000 bin:写bin到Flash0x08000000中
reset run:复位并运行
halt:停止执行
mdw 0x40010C00 7:0x40010C00为GPIOB口寄存器的位置,读取7个字
mww 0x40010C0C 0x00000000:把0x00000000写入0x40010C0C(GPIOB_ODR),之后LED灭

还可以控制其他的寄存器
此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2008-6-5 16:50
点赞 关注
 

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

光注意到了T60


还是IBM滴~~~~~~~~~~~
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

贴出实现代码

非常简单:

void USBprog_OpenOCD_ProcessCmd(u8 *cmd,u32 len)
{
    u32 i;

    switch(cmd[0])
    {
    case PORT_DIRECTION:
        JTAG_TAP_Init();
        JTAG_TAP_TRST_CLR();
        JTAG_TAP_RST_CLR();
        JTAG_TAP_RST_SETOUTPUT();
        JTAG_TAP_TRST_SETOUTPUT();
        break;
    case PORT_SET:
        if(cmd[1] & JTAG_BIT_TDO) JTAG_TAP_TDO_SET(); else JTAG_TAP_TDO_CLR();
        if(cmd[1] & JTAG_BIT_TMS) JTAG_TAP_TMS_SET(); else JTAG_TAP_TMS_CLR();
        if(cmd[1] & JTAG_BIT_TCK) JTAG_TAP_TCK_SET(); else JTAG_TAP_TCK_CLR();
        if(cmd[1] & JTAG_BIT_TDI) JTAG_TAP_TDI_SET(); else JTAG_TAP_TDI_CLR();
        break;
//    case PORT_GET:
//        break;
    case PORT_SETBIT:
        switch(cmd[1])
        {
        case JTAG_IDX_TDO: if(cmd[2] == 1) JTAG_TAP_TDO_SET(); else JTAG_TAP_TDO_CLR(); break;
        case JTAG_IDX_TMS: if(cmd[2] == 1) JTAG_TAP_TMS_SET(); else JTAG_TAP_TMS_CLR(); break;
        case JTAG_IDX_TCK: if(cmd[2] == 1) JTAG_TAP_TCK_SET(); else JTAG_TAP_TCK_CLR(); break;
        case JTAG_IDX_TDI: if(cmd[2] == 1) JTAG_TAP_TDI_SET(); else JTAG_TAP_TDI_CLR(); break;
        case JTAG_IDX_RST: if(cmd[2] == 1) JTAG_TAP_RST_SET(); else JTAG_TAP_RST_CLR(); break;
        case JTAG_IDX_TRST: if(cmd[2] == 1) JTAG_TAP_TRST_SET(); else JTAG_TAP_TRST_CLR(); break;
        }
        break;
//    case PORT_GETBIT:
//        break;
    case WRITE_TDI:
        i = ((u16)cmd[1] << 8) + cmd[2];
        JTAG_TAP_ShiftDataOutPtr(cmd + 3,i,i < 488,0);
        break;
    case WRITE_TMS:
        JTAG_TAP_ChangeState(cmd[1],7);
        break;
    case WRITE_TMS_CHAIN:
        for(i = 0;i < cmd[1];i++)
            JTAG_TAP_ChangeState(cmd[2 + i],7);
        break;
    case READ_TDO:
        i = ((u16)cmd[1] << 8) + cmd[2];
        JTAG_TAP_ShiftDataInPtr(cmd + 3,i,i < 488,0);
        rep_len = len;
        break;
    case WRITE_AND_READ:
        i = ((u16)cmd[1] << 8) + cmd[2];
        JTAG_TAP_ShiftDataInOutPtr(cmd + 3,cmd + 3,i,i < 488,0);
        rep_len = len;
        break;
    default:
        cmd[0] = UNKOWN_COMMAND;
        cmd[1] = 0x00;
        rep_len = 2;
        break;
    }
}

使用了USBprog定义的OpenOCD的USB协议,不过改协议效率不高,主要是由于USBprog使用的AVR芯片的限制,如果重新定义高效的协议后,速度应该可以快一些
此帖出自stm32/stm8论坛
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 

汗2楼一个

感觉最值得注意的是0.276933kb/s的速度,哈哈
果然够慢的吧,据说调试时还好
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 

哈哈



T60比较熟么,其他的都不知道~~~~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

6
 

速度不是OpenOCD的问题,是硬件的缘故

0.276933kb/s,哈哈

请教楼主,可以和WinARM配套用吗?
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

7
 

没测试过

应该可以吧,实现的几个命令都没有问题的话,其他操作只是OpenOCD实现不同的命令组合而已。
OpenOCD由于操作方式的关系,速度确实不是最快的,这个问题在OpenOCD论坛上也讨论过,不过现在使用的这个USB协议也确实还有不少速度上的优化空间。

同样的硬件,模拟AVR Dragon使用ISP下载AT90CAN32芯片时可以达到19KB/s,应该不慢了吧
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 

等咱吃喝不愁了,咱也玩Open Source

                                 多有激情,多有成就感啊
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 

等偶吃喝不愁了就不玩Open Source了

                                 哈哈
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 

测试了一下

                                 现在已经可以配合IAR EWARM 5.11调试STM32了
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 

饿米豆腐

找到Jlink的USB协议了,这下可以好好玩玩了,JLink的协议比USBprog的还要简单哈
有人能提供JLink 5.0的USB描述符和驱动不?
还需要知道版本号是什么格式?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 

看来没什么人对OpenOCD感兴趣了

已经完成了ST-LINK2上实现的JLink 5.0,速度果然快不少:
Mon Jun 02 21:42:48 2008: 4680 bytes downloaded and verified (5.73 Kbytes/sec)
Mon Jun 02 21:42:48 2008: Loaded debugee: D:ProfessionalToolsIAR SystemsARMconfigflashloaderSTFlashSTM32F10xx6.out
Mon Jun 02 21:42:48 2008: Software reset was performed
Mon Jun 02 21:42:48 2008: Target reset
Mon Jun 02 21:42:55 2008: Program exit reached.
Mon Jun 02 21:42:55 2008: Software reset was performed
Mon Jun 02 21:42:55 2008: 1856 bytes downloaded into FLASH and verified (0.26 Kbytes/sec)
Mon Jun 02 21:42:55 2008: Loaded debugee: H:STM32F103VHB6_RevZ_Demo1DebugExedemo.out
Mon Jun 02 21:42:55 2008: Software reset was performed
Mon Jun 02 21:42:55 2008: Target reset
Mon Jun 02 21:42:56 2008: Update all software breakpoints was performed

Flash Loader下载速度快了0.26 / 0.01 = 26倍,现在调试基本没有延时了,哈哈
如果可以修改STLink2的硬件的话,理论上还可以快很多倍
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

13
 

关键是大伙未被科普



目前还不知道opencad是个啥东西

个人认为开源是ARM7调试的必由之路了~~~~~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 

了解一下

                                 对OPENOCD不了解,想问一下,OPENOCD与硬件没关系吗?支持OPENOCD的话,ST-LINK2需要重新改固件吗?OPENOCD与WINDOWS下面的H-JTAG和ST-LINK2有什么区别和优势?谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 

OpenOCD不是硬件

而是一个上位机程序,该程序中有JTAG调试的相关代码,里面的src/jtag目录是一些调试器的驱动程序,由于没有st-link2的驱动,所以需要修改st-link2的固件,改为OpenOCD支持的调试器
当然,如果有人开发了st-link2的驱动的话,也可以直接在OpenOCD里使用,但好像st-link2的驱动方式不是公开的
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

16
 

测试下来

可以正常支持STM32和LPC2138
我的一块LPC2146可能有问题,程序下载后都没反应,JTAG操作也失败,可能是芯片问题
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 

支持,等手头的案子告一段落就玩OpenOCD

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

18
 

不要沉下去了罗

                                  
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表