4719|7

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教关于STM32的JTAG编程问题 [复制链接]

最近要做一个手持下载器,用AT89S52通过JTAG方式给STM32下载程序。由于原来没做过相关的东西,所以网上找了一下相关的资料,照着现有的历程测试了下,发现的以下几个问题

1,STM32对应的BSD文件中,写着   
attribute INSTRUCTION_OPCODE of STM32F103C8: entity is
     "BYPASS  (11111)," &
     "EXTEST  (00000)," &
     "SAMPLE  (00010)," &
     "PRELOAD (00010)," &
     "IDCODE  (00001)";
那么我用IDCODE指令去读取CPUID,代码如下
     //P1_3 P1_5 P1_6引脚对应TDI TCK TMS
     //P3_0对应TDO

     #define JTAG_DELAY() _nop_()
     #define JTAG_GET_TDO()        ((P3_0==1) ? 1:0)

     void nvdJTAG_Set(unsigned char Control)
     {
        P1 = Control;
     }

     void JTAG_ReadId(void)
     {
        int        i;
        char        id[32];

        JTAG_RunTestldleState();

        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); // Select-DR Scan Status
       
        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); // Select-IR Scan Status

        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // Capture-IR Status

        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // Shift-IR Status

        //STM32F103XX IDCODE Instruction "00001"
        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // '1'

        nvdJTAG_Set(TDI_L | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_L | TMS_L | TCK_H);JTAG_DELAY(); // '0'

        nvdJTAG_Set(TDI_L | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_L | TMS_L | TCK_H);JTAG_DELAY(); // '0'

        nvdJTAG_Set(TDI_L | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_L | TMS_L | TCK_H);JTAG_DELAY(); // '0'

        nvdJTAG_Set(TDI_L | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_L | TMS_H | TCK_H);JTAG_DELAY(); // '0', //Exit1-IR

        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); // Update_IR

        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); // Select-DR-Scan

        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); //Capture-DR

        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); //Shift-DR

        //         Read IDcode..
        for( i=0 ; i<=30 ; i++) {
                nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
                nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); //Shift-DR
                id = (char)JTAG_GET_TDO();
        }

        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); //Exit1_DR
        id = (char)JTAG_GET_TDO();

        nvdJTAG_Set(TDI_H | TMS_H | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_H | TCK_H);JTAG_DELAY(); // Update_DR

        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY(); //        
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // Run-Test/Idle
        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // Run-Test/Idle
        nvdJTAG_Set(TDI_H | TMS_L | TCK_L);JTAG_DELAY();
        nvdJTAG_Set(TDI_H | TMS_L | TCK_H);JTAG_DELAY(); // Run-Test/Idle
     }

可是取到的32位ID值,每一位总是常为1,不是正确值。现在STM32的板子可以通过ULink正常写程序。
请问这是怎么回事,是不是JTAG_DELAY()函数的延时不对?还是硬件上需要有特殊的电路?
此帖出自stm32/stm8论坛

最新回复

lz做下载器还是做加密器呀,读id,是为了加密吧 S52的flash 空间好像不大, 能下载什么给stm32单片机呀, st的spi下载程序是开源的,你可以做串口下载器,或者加密器, 我做了一个串口的,硬件很简单,主要是软件实现的,你也可以自己做一个, 我做的是加密器,hoho,   详情 回复 发表于 2010-4-21 11:16
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
接上面的问题
如果当前通过JTAG取得了STM32的控制权,要通过设置STM32的引脚给他内置的Flash写数据,怎么操作。
现在已知控制Flash的寄存器的地址和名称,BSD文件中只有与IO口相关管脚的定义,外围电路的定义没有明确的说明,我不知道哪个管脚与内部Flash相关的寄存器对应,有什么办法可以知道对应关系么。
谢谢各位大侠。
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
请求高手指教
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
您好
   我现在也正在做stm32的手持下载器,一头雾水,能帮忙指点下吗,要访问stm32的flash寄存器,其jtag命令是什么?我的qq147171234 一起讨论下,我是用AVR单片机。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
没具体弄过这方面的东西,MARK

帮顶下、
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
问题1已解决,现在纠结于问题二

用IDCODE取得芯片识别码之后,对stm32内部Flash进行擦写怎么进行
BSD文件里没写管脚或者边界扫描链和寄存器的关系

有人说是 先向指令寄存器写地址,然后操作数据寄存器,数据寄存器的值就传到相应地址上
我理解的是 向指令寄存器写的只能是JTAG的10条指令

请高人指教
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
请教 stm32有没有专门的擦写Flash的Jtag指令?ST是否公开?

此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
lz做下载器还是做加密器呀,读id,是为了加密吧

S52的flash 空间好像不大, 能下载什么给stm32单片机呀,

st的spi下载程序是开源的,你可以做串口下载器,或者加密器,

我做了一个串口的,硬件很简单,主要是软件实现的,你也可以自己做一个,

我做的是加密器,hoho,

此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表