搜索
bottom↓
12
返回列表 发新帖
楼主: helislayer

GPIO 访问 SWD 接口的心得体会

  [复制链接]

出0入0汤圆

发表于 2017-2-13 09:54:04 | 显示全部楼层
helislayer 发表于 2017-2-10 21:18
我编译没有错啊。有几个 warning 但是不影响生成最后的结果。
你 arm-none-eabi-gcc 是直接执行就可以了 ...

有改makefile,
我没有配环境变量,所以是在makefile里指定编译器路径的

  3 GNU_INSTALL_ROOT := /opt/gcc-arm-none-eabi-5_4-2016q3
  4 GNU_VERSION := 5.4.1
  5 GNU_PREFIX := arm-none-eabi
  6
  7 COMPILE_OPTS = -mcpu=cortex-m3 -mthumb -Wall -g -O0
  8 INCLUDE_DIRS = -I . -I lib/inc
  9 LIBRARY_DIRS = -L lib
10
11 # Toolchain commands
12 CC              := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
13 AS              := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
14 AR              := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
15 LD              := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
16 NM              := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
17 OBJDUMP         := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
18 OBJCOPY         := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
19
20 #CC = arm-none-eabi-gcc
21 CFLAGS = $(COMPILE_OPTS) $(INCLUDE_DIRS)
22
23 #CXX = arm-none-eabi-g++
24 CXXFLAGS = $(COMPILE_OPTS) $(INCLUDE_DIRS)

这上面我改动的,是哪里有问题吗?

出0入0汤圆

发表于 2017-2-13 10:05:36 | 显示全部楼层
helislayer 发表于 2017-2-10 21:18
我编译没有错啊。有几个 warning 但是不影响生成最后的结果。
你 arm-none-eabi-gcc 是直接执行就可以了 ...

修改了AS和LD宏后编译输出如下

"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-ar" cr lib/libstm32.a lib/src/stm32f10x_adc.o lib/src/stm32f10x_bkp.o lib/src/stm32f10x_can.o lib/src/stm32f10x_dma.o lib/src/stm32f10x_exti.o lib/src/stm32f10x_flash.o lib/src/stm32f10x_gpio.o lib/src/stm32f10x_i2c.o lib/src/stm32f10x_iwdg.o lib/src/stm32f10x_lib.o lib/src/stm32f10x_nvic.o lib/src/stm32f10x_pwr.o lib/src/stm32f10x_rcc.o lib/src/stm32f10x_rtc.o lib/src/stm32f10x_spi.o lib/src/stm32f10x_systick.o lib/src/stm32f10x_tim.o lib/src/stm32f10x_tim1.o lib/src/stm32f10x_usart.o lib/src/stm32f10x_wwdg.o lib/src/cortexm3_macro.o lib/src/stm32f10x_vector.o
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -Wl,--gc-sections,-Map=main.elf.map,-cref,-u,Reset_Handler -I . -I lib/inc -L lib -T stm32.ld main.o stm32f10x_it.o lib/libstm32.a --output main.elf
O binary main.elf main.bin
make: O: Command not found
makefile:55: recipe for target 'main.bin' failed
make: [main.bin] Error 127 (ignored)

出0入0汤圆

 楼主| 发表于 2017-2-13 10:08:39 | 显示全部楼层
sanger 发表于 2017-2-13 09:54
有改makefile,
我没有配环境变量,所以是在makefile里指定编译器路径的

你先添加路径让后不改 Makefile 试试。
应该可以通过。
然后你就打印实际编译用的参数。
然后对比你改过的看看调用参数有什么不一样。
这个应该就可以调出来了。
你自己试试。

出0入0汤圆

 楼主| 发表于 2017-2-13 10:11:41 | 显示全部楼层
本帖最后由 helislayer 于 2017-2-13 10:16 编辑
sanger 发表于 2017-2-13 10:05
修改了AS和LD宏后编译输出如下

"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-ar" cr lib/libs ...


你按照我说的方法可以自己去调的。
你肯定是 makefile 有个地方续行不对之类的。
而且你没有给出完整 makefile 别人也没法帮你看。
这种小问题自己可以搞定的。

出0入0汤圆

发表于 2017-2-13 10:15:26 | 显示全部楼层
有深度,值得玩一玩

出0入0汤圆

发表于 2017-2-13 11:02:24 | 显示全部楼层
helislayer 发表于 2017-2-13 10:11
你按照我说的方法可以自己去调的。
你肯定是 makefile 有个地方续行不对之类的。
而且你没有给出完整 mak ...

查出问题了,是objcp被我屏蔽了,把objcp改成objcopy就可以了,编译有输出bin文件

"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o main.o main.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o stm32f10x_it.o stm32f10x_it.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_adc.o lib/src/stm32f10x_adc.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_bkp.o lib/src/stm32f10x_bkp.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_can.o lib/src/stm32f10x_can.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_dma.o lib/src/stm32f10x_dma.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_exti.o lib/src/stm32f10x_exti.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_flash.o lib/src/stm32f10x_flash.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_gpio.o lib/src/stm32f10x_gpio.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_i2c.o lib/src/stm32f10x_i2c.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_iwdg.o lib/src/stm32f10x_iwdg.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_lib.o lib/src/stm32f10x_lib.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_nvic.o lib/src/stm32f10x_nvic.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_pwr.o lib/src/stm32f10x_pwr.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_rcc.o lib/src/stm32f10x_rcc.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_rtc.o lib/src/stm32f10x_rtc.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_spi.o lib/src/stm32f10x_spi.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_systick.o lib/src/stm32f10x_systick.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_tim.o lib/src/stm32f10x_tim.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_tim1.o lib/src/stm32f10x_tim1.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_usart.o lib/src/stm32f10x_usart.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_wwdg.o lib/src/stm32f10x_wwdg.c
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -c  -o lib/src/cortexm3_macro.o lib/src/cortexm3_macro.s
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -mcpu=cortex-m3 -mthumb -Wall -g -O0 -I . -I lib/inc   -c -o lib/src/stm32f10x_vector.o lib/src/stm32f10x_vector.c
lib/src/stm32f10x_vector.c:111:3: warning: taking address of expression of type 'void'
   &_estack,            // The initial stack pointer
   ^
lib/src/stm32f10x_vector.c:174:3: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
   (unsigned short)0xF108F85F //this is a workaround for boot in RAM mode.
   ^
lib/src/stm32f10x_vector.c:174:3: note: (near initialization for 'g_pfnVectors[66]')
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-ar" cr lib/libstm32.a lib/src/stm32f10x_adc.o lib/src/stm32f10x_bkp.o lib/src/stm32f10x_can.o lib/src/stm32f10x_dma.o lib/src/stm32f10x_exti.o lib/src/stm32f10x_flash.o lib/src/stm32f10x_gpio.o lib/src/stm32f10x_i2c.o lib/src/stm32f10x_iwdg.o lib/src/stm32f10x_lib.o lib/src/stm32f10x_nvic.o lib/src/stm32f10x_pwr.o lib/src/stm32f10x_rcc.o lib/src/stm32f10x_rtc.o lib/src/stm32f10x_spi.o lib/src/stm32f10x_systick.o lib/src/stm32f10x_tim.o lib/src/stm32f10x_tim1.o lib/src/stm32f10x_usart.o lib/src/stm32f10x_wwdg.o lib/src/cortexm3_macro.o lib/src/stm32f10x_vector.o
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc" -Wl,--gc-sections,-Map=main.elf.map,-cref,-u,Reset_Handler -I . -I lib/inc -L lib -T stm32.ld main.o stm32f10x_it.o lib/libstm32.a --output main.elf
"/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-objcopy" -O binary main.elf main.bin

出0入0汤圆

发表于 2017-4-11 15:57:54 | 显示全部楼层
收藏了, 感谢分享

出0入0汤圆

 楼主| 发表于 2017-7-6 01:36:49 | 显示全部楼层
冒个泡,分享一下最近的一些进度。
关于出错处理,如果在 TRN 后面不是 001 (ACK), 这个时候有两个出错代码是要特别处理的。
一个是 010 (BUSY/RETRY)这个时候只需要重新发一次同样的 request。通常是做和 CPU 竞争的资源
容易碰到这样的问题,例如访问 CPU 的寄存器这些。

一个是 100 (FAULT) 这种出错比较常见的是访问不存在的地址这些,重发request 也还是会
同样错,所以不能重发。需要访问 abort 寄存器去清除错误状态。

然后我发现用 SWD 写单步调试还是挺容易的,关键就是几个 Debug register。可以设置单布
调试,halt,访问寄存器这些。

出0入0汤圆

发表于 2017-7-6 09:18:39 | 显示全部楼层
helislayer 发表于 2017-7-6 01:36
冒个泡,分享一下最近的一些进度。
关于出错处理,如果在 TRN 后面不是 001 (ACK), 这个时候有两个出错 ...

不错不错,多多分享资料

出0入0汤圆

发表于 2017-8-29 02:42:08 | 显示全部楼层
helislayer 发表于 2017-7-6 01:36
冒个泡,分享一下最近的一些进度。
关于出错处理,如果在 TRN 后面不是 001 (ACK), 这个时候有两个出错 ...

我请教个问题。 板子上多个不同的芯片都有SWD接口, 大概3个吧,根据您的理解,  可以把SWDIO,SWDCLK 直接并联吗?

出0入0汤圆

发表于 2017-9-13 21:38:24 | 显示全部楼层
这个帖子干货较多,多谢楼主分享心得。

出0入0汤圆

发表于 2017-9-14 11:23:40 | 显示全部楼层
好多好多经验  mark

出0入0汤圆

 楼主| 发表于 2017-9-17 09:41:05 | 显示全部楼层
31001113 发表于 2017-8-29 02:42
我请教个问题。 板子上多个不同的芯片都有SWD接口, 大概3个吧,根据您的理解,  可以把SWDIO,SWDCLK 直 ...

不号意思,很久没有上来逛。
如果有多个芯片,应该是不可以用并联方式的。
那个 CLK 是永远 host 发送到 mcu, 这个并联有可能是可以的。
就是其他 MCU 会看到很多非法数据根据协议应该忽略掉。
那个SWDIO 是双向的,并联是一定不可以的。

出0入0汤圆

发表于 2017-9-18 06:05:43 | 显示全部楼层
helislayer 发表于 2017-9-17 09:41
不号意思,很久没有上来逛。
如果有多个芯片,应该是不可以用并联方式的。
那个 CLK 是永远 host 发送到  ...

恭喜楼主调通了~~~
这二天我也看了些SWD协议的资料,主要是不开源,也没有参考代码,只能一点点去尝试了,我也想搞一下脱机下载试试.

出0入0汤圆

 楼主| 发表于 2017-10-18 06:44:45 | 显示全部楼层
CMSIS-DAP 里面有类似的代码。
我看了一下 CMSIS - DAP 的代码,我不是很喜欢。
然后就自己写了。

出0入0汤圆

发表于 2017-10-18 10:34:54 | 显示全部楼层
很有用的资料,多谢分享!!!

出0入0汤圆

发表于 2017-11-20 00:28:09 | 显示全部楼层
helislayer 发表于 2017-9-17 09:41
不号意思,很久没有上来逛。
如果有多个芯片,应该是不可以用并联方式的。
那个 CLK 是永远 host 发送到  ...

有道理, 谢谢。

出0入0汤圆

发表于 2017-11-20 20:14:01 | 显示全部楼层
请问zhangyh89,我现在可以连接SWD_Connect();但是connect_and_halt_core();时候,无法获取到IDR,知道什么原因吗

出590入992汤圆

发表于 2017-12-21 16:44:07 | 显示全部楼层

我就说你换头像了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-1-29 11:05:42 | 显示全部楼层
mark,swd 模拟,diy下载器

出0入0汤圆

发表于 2018-7-1 16:12:09 | 显示全部楼层
你好,请教下,我现在在做STM32F103的脱机下载器,现在能读出AP值为0x14770011,那么怎么擦除及写FLASH呢?

出50入58汤圆

发表于 2018-7-2 21:40:00 来自手机 | 显示全部楼层
收藏了,感谢分享

出0入0汤圆

发表于 2019-8-4 06:16:09 来自手机 | 显示全部楼层
感谢分享

出100入0汤圆

发表于 2019-8-4 11:01:18 | 显示全部楼层
记号,学习了

出0入0汤圆

发表于 2020-10-15 15:41:10 | 显示全部楼层
helislayer 发表于 2016-6-25 20:04
AP 访问的第一个寄存器 CSW 可以设定 TAR 是否自动增长和 DRW 访问的位数。在那里设置16位就可以用16位访 ...

设置了CSW寄存器的size位和addrInc位,但是在编程的时候,显示数据写入了两次,而且还不能改变地址,再下一步无论读或者写,ack都返回2,这是怎么回事??

出0入0汤圆

发表于 2021-8-16 17:21:18 | 显示全部楼层
先留上,最近也在搞这个,搞了好几天没搞明白,还有后续更新的资料可以参考一下吗,非常感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 04:03

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

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