历史上的今天
返回首页

历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2018年10月13日 | ubuntu下建立stm32开发环境:程序烧录openocd+openjtag

2018-10-13 来源:eefocus

上一篇博客写了在ubuntu下,建立stm32开发环境,程序也已经编译好生成main.bin,接下来就是要把该文件烧录到stm32上.在Linux下给arm烧录程序主要使用openocd,这个软件开源,而且支持众多芯片,从ARM9到A8都可以,当然STM32也可以.支持的JTAG工具也很多,JLINK ST-LINK OSBDM都可以,我这正好有一个openjtag基于FT2232C的,也是被支持的.


参考:


How-to manual  Installing a toolchain for Cortex-M3/STM32 on Ubuntu   by Peter Seng

博主最近在电脑上自建了博客,以后会更多的用那个了,欢迎关注访问,里面也有很多有用资源:http://www.embbnux.com


一  安装openocd

在ubuntu下安装openocd:

sudo apt-get install openocd


也可以到官网下载源码包自己编译


二 安装openjtag驱动


插上openjtag

user@ubuntu:~/$ lsusb 
Bus 002 Device 005: ID 093a:2521 Pixart Imaging, Inc.  
Bus 002 Device 003: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)


第二个就是了,记下ID 1457:5118

sudo gedit /etc/udev/rules.d/45-ftdi2232-libftdi.rules

在里面添加

SYSFS{idProduct}=="5118", SYSFS{idVendor}=="1457", MODE="666", GROUP="plugdev"

   权限666,使用openocd就不用sudo了.

sudo /etc/init.d/udev restart

拔下在插上就可以了.

三 使用openocd 连openjtag

JTAG接口配置文件openjtag.cfg.根据JTAG设备不同,修改下面

#interface configuration openjtag############################# 
interface ft2232 
ft2232_device_desc "USB<=>JTAG&RS232" 
ft2232_layout jtagkey 
ft2232_vid_pid 0x1457 0x5118


可以参考openocd目录下的文件:/usr/share/openocd/scripts/interface,主要是设备ID以及设备名字,可以通过dmesg | grep usb命令查看.

要烧录stm32f103就得有这个设备的相关配置,可以查看/usr/share/openocd/scripts/target/stm32f1x.cfg

这里把两个文件合在一起openocd.cfg

#daemon configuration############################################################### 
telnet_port 4444 
gdb_port 3333 
 
#interface configuration openjtag############################# 
interface ft2232 
ft2232_device_desc "USB<=>JTAG&RS232" 
ft2232_layout jtagkey 
ft2232_vid_pid 0x1457 0x5118 
 
#board configuration################################################################ 
# Adjust Work-area size (RAM size) according to MCU in use: 
#STM32F103RB --> 20KB 
#set WORKAREASIZE 0x5000 
#STM32F103ZE --> 64KB 
set WORKAREASIZE 0x10000 
 
#target configuration############################################################### 
# script for stm32f1x family 
if { [info exists CHIPNAME] } { 
set _CHIPNAME $CHIPNAME 
} else { 
set _CHIPNAME stm32f1x 

if { [info exists ENDIAN] } { 
set _ENDIAN $ENDIAN 
} else { 
set _ENDIAN little 

# Work-area is a space in RAM used for flash programming 
# By default use 16kB 
if { [info exists WORKAREASIZE] } { 
  set _WORKAREASIZE $WORKAREASIZE 
} else { 
  set _WORKAREASIZE 0x4000 

# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz 
adapter_khz 500 
adapter_nsrst_delay 100 
jtag_ntrst_delay 100 
#jtag scan chain 
if { [info exists CPUTAPID] } { 
 set _CPUTAPID $CPUTAPID 
} else { 
# See STM Document RM0008 
# Section 31.6.3 
  set _CPUTAPID 0x3ba00477 

jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID 
if { [info exists BSTAPID] } { 
# FIXME this never gets used to override defaults... 
  set _BSTAPID $BSTAPID 
} else { 
# See STM Document RM0008 
# Section 31.6.2 
# Low density devices, Rev A 
 set _BSTAPID1 0x06412041 
# Medium density devices, Rev A 
 set _BSTAPID2 0x06410041 
# Medium density devices, Rev B and Rev Z 
 
 set _BSTAPID3 0x16410041 
 set _BSTAPID4 0x06420041 
# High density devices, Rev A 
 set _BSTAPID5 0x06414041 
# Connectivity line devices, Rev A and Rev Z 
 set _BSTAPID6 0x06418041 
# XL line devices, Rev A 
 set _BSTAPID7 0x06430041 
# VL line devices, Rev A and Z In medium-density and high-density value line devices 
 set _BSTAPID8 0x06420041 
# VL line devices, Rev A 
 set _BSTAPID9 0x06428041 

jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 \ 
    -expected-id $_BSTAPID2 -expected-id $_BSTAPID3 \ 
    -expected-id $_BSTAPID4 -expected-id $_BSTAPID5 \ 
    -expected-id $_BSTAPID6 -expected-id $_BSTAPID7 \ 
    -expected-id $_BSTAPID8 -expected-id $_BSTAPID9 
 
set _TARGETNAME $_CHIPNAME.cpu 
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME 
 
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 
 
# flash size will be probed 
set _FLASHNAME $_CHIPNAME.flash 
flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME 
 
# if srst is not fitted use SYSRESETREQ to 
# perform a soft reset 
cortex_m reset_config sysresetreq


开始烧录:

  < 1 >  在一个终端下执行:
            openocd -f openocd.cfg

出现:
Open On-Chip Debugger 0.7.0 (2013-05-15-17:28) 
Licensed under GNU GPL v2 
For bug reports, read 
    http://openocd.sourceforge.net/doc/doxygen/bugs.html 
Info : only one transport option; autoselect 'jtag' 
adapter speed: 500 kHz 
adapter_nsrst_delay: 100 
jtag_ntrst_delay: 100 
cortex_m3 reset_config sysresetreq 
Info : clock speed 500 kHz 
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) 
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020, part: 0x6414, ver: 0x0) 
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

没有提示出错,就表示连接上STM32了 .如果出现出错,就在开发板上按下RESET 键复位,查看BOOT0和BOOT1有没有设置出错.


< 2 > 在另一个终端下,输入:
       telnet localhost 4444

依次输入:
       reset halt 
       flash probe 0 
       stm32f1x mass_erase 0 
       flash write_bank 0 /you_stm32_project_dir/main.bin 0 
       reset run

程序就烧好了,按下reset键,就开始运行了.

 要输入这么多命令太麻烦了,写个perl脚本使它一步运行.

首先安装perl-telnet
        sudo apt-get install libnet-telnet-perl

在工程目录下新建do_flash.pl文件
#!/usr/bin/perl 
use Net::Telnet; 
 
$numArgs = $#ARGV + 1; 
if($numArgs != 1){ 
   die( "Usage ./do_flash.pl [main.bin] \n"); 

 
$file = $ARGV[0]; 
$ip = "127.0.0.1"; 
$port = 4444; 
$telnet = new Net::Telnet ( 
   Port => $port, 
   Timeout=>10, 
   Errmode=>'die', 
   Prompt =>'/>/'); 
 
$telnet->open($ip); 
 
print $telnet->cmd('reset halt'); 
print $telnet->cmd('flash probe 0'); 
print $telnet->cmd('stm32f1x mass_erase 0'); 
print $telnet->cmd('flash write_bank 0 '.$file.' 0'); 
print $telnet->cmd('reset halt'); 
print $telnet->cmd('exit'); 
 
print "\n";

在根目录下的Makefile文件里面加入这段语句:
flash:all 
    ./do_flash.pl $(TOP)/main.bin

这样只要,执行make flash就可以直接运行第二步了,方便简介.


推荐阅读

史海拾趣

GaN Systems公司的发展小趣事

为了更好地服务全球客户,GAIA盖亚电源积极实施全球化战略,在全球范围内设立了25个分支机构,形成了覆盖广泛的销售和技术支持网络。这些分支机构不仅负责当地市场的开拓和维护,还为客户提供了及时、专业的技术支持和售后服务。通过本地化管理,GAIA盖亚电源能够更加灵活地应对不同地区的市场需求,进一步提升客户满意度和品牌影响力。

Freeport Resources Enterprises Corp公司的发展小趣事

随着全球对环保和可持续发展的重视,Freeport Resources将这一理念融入到公司的发展战略中。公司投入大量资金进行环保设施建设和生产技术改造,致力于减少开采和加工过程中的环境污染和资源浪费。同时,Freeport Resources还积极参与社会公益活动,推动矿业与社区的和谐共生。这些举措不仅提升了公司的社会形象,也为其在电子材料市场的长期发展奠定了坚实的基础。

ENTRELECUK公司的发展小趣事

在电子行业中,绿色环保和可持续发展已成为重要的议题。ENTRELEC UK积极响应这一趋势,致力于研发和生产环保型产品。公司采用环保材料和节能技术,降低产品对环境的影响。同时,公司还积极参与环保公益活动,推动行业的可持续发展。

Curtis Instruments Inc公司的发展小趣事

随着全球市场的不断变化和竞争的加剧,Curtis不断加强全球布局和战略合作。公司与多家国际知名企业建立了长期合作关系,共同开发新产品、拓展新市场。此外,Curtis还积极参与国际展览和交流活动,展示公司的最新技术和产品成果,提高品牌知名度和影响力。这些全球布局和战略合作有助于Curtis更好地应对市场挑战、把握发展机遇。

Fascomp公司的发展小趣事

Fascomp公司起源于一间小型的电子产品研发工作室。创始人李明和他的团队在资金紧张、技术条件有限的情况下,坚持自主研发一款高性能的芯片。经过无数次的失败和试验,他们最终成功开发出了一款具有竞争力的芯片,赢得了市场的初步认可。这个过程中,团队成员的坚持和对技术的执着追求成为了公司后续发展的基石。

H&D Wireless公司的发展小趣事

2017年,高创被美的集团全资收购,成为美的工业技术事业群的重要业务板块之一。这一转变标志着高创进入了一个全新的发展阶段。借助美的集团的平台力量,高创在技术研发、生产制造、供应链管理等方面得到了显著提升。同时,与美的集团旗下其他业务板块如库卡机器人等的协同合作,进一步拓宽了高创的市场应用领域。

问答坊 | AI 解惑

一种谐波和无功电流检测的新算法

摘要:分析了并联有源滤波器的基本工作原理,提出了一种谐波和无功电流检测的新算法,对此作了详细的理论分析。此检测算法不需要锁相环,能准确检测出负载电流中谐波及无功分量。对这种检测算法用MATLAB进行了仿真,并在以TMS320F2407DSP为控制核心 ...…

查看全部问答>

销量急剧下跌, MP4产业出路在何方

最近买了个mp4,国产货,质量实在令人汗然...这就令我想到一个话题,MP4产业到底路在何方? 说到MP4就会想到一个小小的集音乐、视频、游戏等娱乐功能在一身的数码播放器,MP4曾经一度被许多人认为会取代MP3,成为未来个人随身移动多媒体设备的宠儿。 ...…

查看全部问答>

SK-182A 2合1 编码调制板

SK-182A 2合1 编码调制板   SK-182A 编码调制一体化模块体积小功耗低,完全符合DVB-T标准,支持标准的COFDM调制和标准MPEG2编码,支持标准的视频信号输入模式,平衡的立体声输入,各种电气性能完全符合ETSI EN 300744的标准要求。 SK-182A ...…

查看全部问答>

MDK中国版例程服务包

服务包大小:50.5M 下载地址:http://www.realview.com.cn/down-list.asp?id=611 RealView MDK 3.24下载地址:http://www.realview.com.cn/down-list.asp?id=610 使用说明:将MDK中国版例程服务包解压到MDK的安装目录下C:\\Keil\\ARM覆盖即可 B ...…

查看全部问答>

汽车电子领域高可靠性的焊接设备

一。选择性波峰焊用途电路板插装元件的减少以及表面贴装元件的小型化和精细化,推动了回流焊工艺的不断进步,目前已取代波峰焊成为一种主流焊接工艺。然而,并非所有的元件均适宜回流焊炉中的高温加热,在许多场合中,插装元件仍得到了较为广泛的应 ...…

查看全部问答>

---------WINCE5.0安装问题----------------

以前在PC上安装过wince5.0(系统是win2k server),过期后卸载重新安装总是出问题。现在换了一块硬盘,重新装系统win2k server sp4,并且安装了net compactwork1.1,但是安装WINCE5.0的时候仍出问题。弹出窗口意思是如果是WIN2K系统需要SP4,如果是W ...…

查看全部问答>

EPWM问题

今天编了个PWM波形的文件,奇怪的是EPWM1B输出居然和我编写时预计的输出波形反相。 我用同样的方法编写了其他几个口出来的波形和我预计的是一样的。 难不成中头奖了。 [ 本帖最后由 安_然 于 2010-8-19 17:37 编辑 ]…

查看全部问答>