将物联网多传感器移植到ISM14585模块

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
11个员额/ 0个新员额
最后发表
gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
将物联网多传感器移植到ISM14585模块

亲爱的对话支持:,

我们正在使用新的Inventek ISM14585模块。我们希望使用BMI160(稍后添加BMM150)将MSK固件移植到此模块。在多传感器DK上,我已成功地用BMI160替换acc/陀螺仪,并使其运行。

现在我在移植固件时遇到了一些麻烦。

观察

(1)我不得不undef use_spi_flash_config,否则我有一个硬故障(等待spi读取闪光灯)。我不知道问题可能是什么。ISM14585的内部闪存是Gigadevice GD25D系列。

(2) 我已经停用了env的大部分例程。代码中的传感器和磁强计。当我启动固件并连接物联网应用程序时,UART显示以下内容:

= = = = = = = =物联网+开始= = = = = = = = INFO:传感器Initilization信息:传感器暂停信息:阿德开始,值:160信息:物联网互联信息:传感器Initilization信息:传感器暂停信息:DWS cmd: 21信息:DWS cmd: 22信息:DWS cmd: 11信息:DWS cmd: 1信息:传感器开始信息:DWS cmd: 17信息:DWS cmd: 13信息:DWS cmd: 20信息:DWS cmd: 26

在这之后,什么都没发生。该应用程序不显示任何传感器数据。

发现

(A) 我测量到BMI160中断一直很高,似乎DRDY中断不工作。
除此之外,我看到CS、CLK、MISO、MOSI没有任何异常。

(B) 在UM-B-101附录A中,我发现多传感器DK实际上使用了一个辅助引导加载程序,负责一些配置步骤;但在我看来,它并没有为BMI160做任何重要的事情(而它为原始的acc/陀螺仪做了一些配置)。
在ISM14585中,由于内部闪存CS映射到P0_7而不是P0_3,因此OTP将使用辅助引导加载程序进行刻录(因此,如果没有此功能,它将无法在开发模式下引导)。

我的问题

(1)我没有看到BMI160下跌的中断的原因是什么?
(2) 是否需要特殊的辅助引导加载程序?我可以通过将生成的十六进制文件闪存到闪存中来移植固件吗?

非常感谢你的帮助。

约翰内斯酒店

设备:
MHv_Dialog
离线
最后看到:1个月3个星期前
工作人员
加入:2013-12-06 15:10
嗨,约翰,

嗨,约翰,

请让我知道哪些GPIO连接到BMI160,这样我就可以在我这边运行它了。

  1. 显然,BMI160的所有初始化以及GPIO映射必须正确才能工作
  2. 辅助引导加载程序不是必需的。可以通过OTP头的寄存器指定引导加载所需的GPIO。您可以直接将生成的十六进制文件(实际上SmartSnippets工具箱将首先将其转换为二进制文件)闪存到闪存中。您必须在SmartSnippets工具箱中设置SPI GPIOs,以指定P0_7为SPI CS。

我不太喜欢使用传感器物联网标签固件作为应用程序的起点。你会被留下很多半途而废的代码片段,它们最终会咬到你。更好的方法是使用空的模板项目,然后慢慢地将代码片段移动到该项目中。

/MHv

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
嗨MHv,

嗨MHv,

广告1。:
GPIO映射很简单,SPI总线在CLK/MOSI/MISO、CS(P1_3)和DRDY/INT(P0_1)的标准端口上与闪存共享,我已正确配置。初始化应该与多传感器DK一起工作,因为DK能够与BMI160一起工作(我们已经验证)。

广告2。:
一个二级引导加载程序已经被制造商英业达烧制为OTP。我将和他们讨论为什么他们没有按照你的建议去做。也许这是个误会。
我知道如何配置smarsnippets,毕竟我有固件运行和广告(从flash引导)。
在UM-B-101中,说明了MS DK辅助引导加载程序[…]

初始化IMU(ICM42605或BMI160)设备以在SPI模式下运行。

这就是为什么我问这个特定引导加载程序的必要性。通过查看代码,我的印象是引导加载程序确实为ICM42605配置了一些东西,但没有为可选填充的BMI160配置。

对于我们之前基于Murata ZY的原型,我们移植了“旧”物联网传感器SDK,它运行得很好。当然,从零开始是一个更干净的解决方案,但在有限的人力下,剥离现有的项目是更快的方法……

约翰内斯酒店

MHv_Dialog
离线
最后看到:1个月3个星期前
工作人员
加入:2013-12-06 15:10
嗨,约翰,

嗨,约翰,

辅助引导加载程序中的IMU初始化并不重要(坦率地说,我不知道我们为什么将其放在那里),并且我在代码中没有看到任何对BMI160的引用。很抱歉提出明显的问题,但我假设您已将BMI160完全按照多传感器套件中的连接方式连接(使用相同的中断等)。我还假设您已经正确初始化了总线(在辅助引导加载程序中,这是为ICM IMU管理的,包括GPIO的选择)。

我将在今天晚些时候直接联系你,帮助解决这个问题。

/MHv

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
嗨MHv,

嗨MHv,

我有更多的发现。

(1)初始化似乎是正确的,无论引导加载程序可能做什么,MS DK也正确配置gpio。gpio和SPI参数在set_pad_functions和iot_dk_spi_init中配置:

void periph_init(void){//上电外设'Power Domain SetBits16(PMU_CTRL_REG,PERIPH_SLEEP,0);而(!(getword16(sys_stat_reg)&per_is_up));setBits16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);// rom修补程序patch_func();// init pads set_pad_functions();//(re)初始化外设iot_dk_spi_init(Accel_cs_port,Accel_CS_PIN,SPI_XTAL_DIV_2);

(2)用示波器观察MISO, MOSI, CLK, CS的预期活动。SPI似乎运行良好。

(3)我观察到BMI160中断高(再次显示BMI160似乎通过SPI被正确编程),这似乎是问题开始。固件对中断没有反应。

观察(3)我用臭氧检查行为(扰流板:我第一次使用它)。一个断点

无效SIU设置中断(SIU列表实体ptr)

在文件中,sensors_interface.c显示中断确实正在配置中。中的断点

Void si_gpio_irq_cb(uint8_t port, uint32_t pin)

然后显示回调从未执行,尽管引脚变高。根据我们的原理图正确配置PIN:

#define ACCEL_DRDY_PORT GPIO_PORT_0 #define ACCEL_DRDY_PIN GPIO_PIN_1[…]GPIO_ConfigurePin(ACCEL_DRDY_PORT, ACCEL_DRDY_PIN,INPUT_PULLDOWN, PID_GPIO, false);

[编辑;删除我现在认为是正常的部分,无助于发现问题]

在您之前的回复中,您表示想与我联系,但我没有收到通知或电子邮件。你需要我的联系方式吗?

约翰内斯酒店

编辑:

(a)当我启用运动时的尾流功能时,情况也是如此。我可以观察到设备进入睡眠状态,中断很低。当我移动传感器时,引脚确实会变高,但固件不会对此做出反应。
(b)我已经禁用了这些测试的睡眠模式。

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
亲爱的对话支持:,

亲爱的对话支持:,

我仍在急切地等待答复。中断不起作用的原因可能是什么?我如何进一步调查臭氧的问题?

约翰内斯酒店

PM_对话框
离线
最后看到:3天22小时前
工作人员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

我为耽搁道歉。我完全同意MHv_Dialog的观点,我认为最好的方法是使用empty_peripheral_template项目,然后慢慢地将一些代码移到该项目中。不过,我会在团队内部征求他们的意见。我会尽快给你回电话。

谢谢,下午好

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
你好,下午对话,

你好,下午对话,

考虑到我们的项目与多人传感器DK有多少次(除了:缺少Env传感器,不同的磁力计,不同的引脚,不同的Flash / Pa),我希望您能理解我仍然有利于剥离/修改的方法多传感器DK。我希望你有一些想法如何调查为什么我没有看到中断。
也许我应该从使用empty_peripheral_template测试中断功能本身开始。

约翰内斯酒店

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
你好,下午对话,

你好,下午对话,

(有什么消息吗?你知道我该怎么解决这个问题吗?使用臭氧进行验证的说明将会很好。]

编辑:
在对代码进行了长时间的调查之后,我注意到

空白wkup_ad_cb(空白)

仅检查寄存器P1和P2。然后我在第20页的UM-B-101中看到了这样的内容:

目前,该模块支持端口1和2中的中断。此硬件配置不支持其他端口。

你能告诉我 - 迫切会告诉我 - 如果港口0上的中断是不可能的吗?这里的限制是什么?SDK6?多传感器DK?da14585?

编辑2:
我修改了回调函数,只是根据端口0的条件添加了一些,似乎没有什么问题。
它是非常不幸的是,我花了很长时间才发现。当然,这是有记录的……但我从来没有想到实现是不完整的。我很想知道原因。

约翰内斯酒店

PM_对话框
离线
最后看到:3天22小时前
工作人员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

根据UM-B-101文件,585 MSK固件扩展了中断处理的可能性,以便唤醒。当前此模块支持端口1和2中的中断,因为端口0保留给其他作用域。请记住,585 MSK是为配合MSK硬件而设计的。请看表1UM-B-101:DA14585物联网多传感器开发工具包开发人员指南文档以检查端口0分配。此外,如果您检查wkup_ad_cb()的源代码,您将看到它是为端口1和2配置的。

//IO端口寄存器易失性uint32\u t*ptr\u P1=(易失性uint32\u t*)P1\u DATA\u REG;易失性uint32_t*ptr_P2=(易失性uint32_t*)P2_DATA_REG;

谢谢,下午好

gme_johannes
离线
最后看到:4个月1周前
加入:2017-12-22 10:09
你好,下午对话,

你好,下午对话,

正如我在第二次编辑中所写的,我已经解决了这个问题。毕竟,在端口0上获得中断没有问题。

谢谢,

约翰内斯