51uwb.cn

 找回密码
 立即注册
查看: 8791|回复: 11
打印 上一主题 下一主题

有关Jlink调试时读取SPI数据失败问题

[复制链接]

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
跳转到指定楼层
楼主
发表于 2020-4-13 18:00:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 maybe0524 于 2020-4-15 10:30 编辑

遇到一个现象,Jlink调试的时候,SPI读DWM1000的ID号全部是FF,多尝试软硬复位现象仍是这样。
完全断电,然后上电才能读取OK。
我想问下在实际项目里边,会遇到这样的现象吗?这会影响到我的选择,是不是要额外添加一个开关,用于异常时断电。

Normal case:
DEBUG [00000284]: dmw use for TAG
DEBUG [00000288]: device_id: 0xdeca0130(=? 0xdeca0130).

DCIM.jpg (16.31 KB, 下载次数: 1882)

DCIM.jpg
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
沙发
发表于 2020-4-13 19:00:25 | 只看该作者
init pass了,读取是0XFFFFFFF?
如果是0xFFFFFF,继续后面执行,是否可以测距或者定位?
回复

使用道具 举报

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
板凳
 楼主| 发表于 2020-4-13 22:01:41 | 只看该作者
本帖最后由 maybe0524 于 2020-4-14 11:13 编辑

如果是0xffffffff,继续后面执行,会直接跑进段错误的while (1)循环里边去了哦。晚点我可以把堆栈的信息贴上来。

Update:

看这个堆栈,貌似跟线程调度有关系,但如果我在判断ID不对的时候,不让程序往下运行,那么就不会出现段错误吧。
不知道读取不到ID号跟调度之间有什么关系。
源码:https://github.com/maybe524/AIBR ... V1.1_16MHz_V1.3.git
分支:AIBRAIN_RTOS

微信图片_20200414110917.png (56.22 KB, 下载次数: 4372)

微信图片_20200414110917.png
回复

使用道具 举报

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
地板
 楼主| 发表于 2020-4-14 11:17:57 | 只看该作者
蓝点无限 发表于 2020-4-13 19:00
init pass了,读取是0XFFFFFFF?
如果是0xFFFFFF,继续后面执行,是否可以测距或者定位?

已经回复你了
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
5#
发表于 2020-4-14 11:41:31 | 只看该作者

把硬件模块后面的版本号给我发下
回复

使用道具 举报

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
6#
 楼主| 发表于 2020-4-14 11:46:30 | 只看该作者
蓝点无限 发表于 2020-4-14 11:41
把硬件模块后面的版本号给我发下

板子后边的版本拍照

微信图片_20200414114503.jpg (157.73 KB, 下载次数: 5165)

微信图片_20200414114503.jpg
回复

使用道具 举报

73

主题

249

帖子

7065

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7065
7#
发表于 2020-4-14 20:55:16 | 只看该作者
maybe0524 发表于 2020-4-14 11:46
板子后边的版本拍照

我检查了你提供的硬件和软件,主要怀疑是DWM1000 复位问题,
1 检查连线,发现配置正确

  1. #ifdef STM32F10X_HD
  2.         #define DW1000_RSTn                                        GPIO_Pin_0
  3.         #define DW1000_RSTn_GPIO                        GPIOA
  4. #else
  5.         #define DW1000_RSTn                                        <font color="#ff0000">GPIO_Pin_12</font>
  6.         #define DW1000_RSTn_GPIO                        <font color="#ff0000">GPIOB</font>
  7. #endif
复制代码
如果你对代码进行移植,建议修改成如下方式
  1. #define DW1000_RSTn                                        GPIO_Pin_12
  2. #define DW1000_RSTn_GPIO                        GPIOB
复制代码

2  检查reset时序
  1. void reset_DW1000(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;

  4.     // Enable GPIO used for DW1000 reset
  5.     GPIO_InitStructure.GPIO_Pin = DW1000_RSTn;
  6.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  7.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8.     GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure);

  9.     //drive the RSTn pin low
  10.     GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn);

  11.     //put the pin back to tri-state ... as input
  12.     GPIO_InitStructure.GPIO_Pin = DW1000_RSTn;
  13.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  14.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.     GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure);

  16.     deca_sleep(2);
  17. }
复制代码
尝试修改为如下:
  1. void reset_DW1000(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;

  4. // Enable GPIO used for DW1000 reset
  5. GPIO_InitStructure.GPIO_Pin = DW1000_RSTn;
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  7. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8. GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure);
  9. <font color="#ff0000">GPIO_SetBits(DW1000_RSTn_GPIO, DW1000_RSTn);</font>
复制代码
3 在初始化DW1000前,使用软件方式对DW1000 进行reset
  1. <font color="#ff0000">    reset_DW1000();  </font>
  2.     spi_set_rate_low();
  3.     //dwt_configuresleepcnt(50);

  4.     if(dwt_initialise(DWT_LOADUCODE) == -1)
  5.     {
复制代码






回复

使用道具 举报

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
8#
 楼主| 发表于 2020-4-15 10:29:36 | 只看该作者
tuzhuke 发表于 2020-4-14 20:55
我检查了你提供的硬件和软件,主要怀疑是DWM1000 复位问题,
1 检查连线,发现配置正确

多谢回复。我看我这部分的代码没做改动呀。使用默认的就如同你全部说的一样了。
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
9#
发表于 2020-4-15 13:55:52 | 只看该作者
maybe0524 发表于 2020-4-15 10:29
多谢回复。我看我这部分的代码没做改动呀。使用默认的就如同你全部说的一样了。

上面提到的代码和你现在用的不一样,你自己对比下
回复

使用道具 举报

3

主题

15

帖子

39

积分

新手上路

Rank: 1

积分
39
10#
 楼主| 发表于 2020-4-15 15:19:29 | 只看该作者
蓝点无限 发表于 2020-4-15 13:55
上面提到的代码和你现在用的不一样,你自己对比下

看到了,话说这回复里边的编码风格,看得眼花呀。就看见一个不一样的地方:
1、这个是一样的
2、GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn);
       改成:
       GPIO_SetBits(DW1000_RSTn_GPIO, DW1000_RSTn);
3、这个是一样的
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-11-23 19:32 , Processed in 0.020376 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

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