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

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
11个员额/ 0新
最后一篇
gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
将物联网多传感器移植到ISM14585模块

亲爱的对话框支持,

我们正在使用英业达的ISM14585模块。我们想要将MSK固件移植到这个模块,使用BMI160(稍后添加BMM150)。在MultiSensor DK上,我已经成功地用BMI160替换了acc/陀螺仪,并让它运行。

现在我有一些麻烦移植固件。

观察

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

我已经禁用了env的大多数例程。代码里的传感器和磁力仪。当我启动固件,并连接物联网应用程序时,UART显示如下:

========的IoT + STARTED ======== INFO:传感器动初始化INFO:传感器挂起INFO:进阶指南,值:160 INFO:的IoT +互联INFO:传感器动初始化INFO:传感器挂起INFO:DWS CMD:21信息:DWS CMD:22信息:DWS CMD:11信息:DWS CMD:1信息:传感器发起者INFO:DWS CMD:17信息:DWS CMD:13信息:DWS CMD:20信息:DWS CMD:26

在此之后,没有任何反应。该应用程序不显示任何传感器数据。

发现

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

(B)在UM-B-101附录A中,我发现MultiSensor DK实际上使用了一个二级引导加载程序,它负责一些配置步骤;但在我看来,它对BMI160没有任何重要的作用(然而它对原始acc/陀螺仪做了一些配置)。
在ISM14585中,OTP使用了一个辅助引导加载程序,因为内部flash CS映射到P0_7而不是P0_3(因此如果没有这个,它将无法在dev模式下引导)。

我的问题

(1)有什么可以,我没有看到BMI160要低,中断的原因是什么?
(2)是否需要特殊的辅助引导程序?我可以通过只刷新产生的十六进制文件到闪存端口固件吗?

非常感谢你的帮助。

BR约翰内斯

设备:
MHv_Dialog
离线
最后一次露面:1个月2个星期前
职员
加入:2013-12-06 15:10
嗨约翰尼斯

嗨约翰尼斯

请让我知道哪些gpio连接到BMI160,以便我可以运行它在我的一边。

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

我不太喜欢使用传感器物联网标签固件作为您的应用程序的起点。您将会留下许多不完全支持的代码片段,这些代码最终会对您造成伤害。一个更好的方法是使用empty_peripheral_template项目,然后慢慢地将代码块移动到该项目中。

/ MHv

gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
嗨MHV,

嗨MHV,

广告1:
GPIO映射是琐碎的,SPI总线与flash共享的标准端口CLK/MOSI/MISO, CS (p_3)和DRDY/INT (P0_1)我已经正确配置。初始化应该与MultiSensor DK一起工作OOB,因为DK能够使用BMI160(我们已经验证过了)。

广告2:
一种二次引导程序已经由制造商Inventek燃烧以OTP。我将与他们讨论他们为什么你认为还没有做到。也许这是一种误解。
我知道如何配置SmartSnippets的,毕竟我有固件运行和广告(引导从闪存)。
在UM-B-101中指出,该MS DK次级引导加载程序[...]

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

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

对于我们以前的原型,这是基于村田ZY,我们已经移植“旧”物联网传感器SDK,它作为工作就好了。从头开始当然是一个清晰的解决方案,但人手有限,剥离下来的现有项目是更快的方法...

BR约翰内斯

MHv_Dialog
离线
最后一次露面:1个月2个星期前
职员
加入: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)I观察MISO,MOSI,CLK,CS的exepcted活性用示波器。SPI似乎是工作的罚款。

(3)我观察到BMI160中断(再次表明BMI160似乎是通过SPI正确编程)变高,这似乎是问题的开始。该固件不反应中断。

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

空白si_setup_interrupts (si_list_entity_t * ptr)

在sensors_interface.c文件中显示了中断确实正在被配置。一个断点

空隙si_gpio_irq_cb(uint8_t端口,uint32_t的销)

然后显示回调从未执行,尽管引脚变高。根据我们的原理图正确配置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);

[编辑;删除了一个部分,我现在认为是正常的,并没有帮助找到问题]

在您的早期反应你曾表示想联系我,但我没有收到通知或电子邮件。你需要我的联系方式?

BR约翰内斯

编辑:

(a)中也同样如此是我使上运动特征唤醒。我可以观察到,该设备进入睡眠状态,中断低。当我移动传感器,针确实变高,但固件不对其做出反应。
(二)我对这些测试禁用休眠模式。

gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
亲爱的对话框支持,

亲爱的对话框支持,

我还在急切地等待答复。是什么原因导致中断不起作用?我如何进一步研究臭氧的这个问题?

BR约翰内斯

PM_Dialog
离线
最后一次露面:1天22小时前
职员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

我为延迟道歉。我完全同意MHv_Dialog,我认为最好的办法是使用empty_peripheral_template项目和缓慢移动的代码段到该项目中。不过,我会团队内部得到他们的反馈。我会尽快回复你。

谢谢,PM_Dialog

gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
嗨PM_Dialog,

嗨PM_Dialog,

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

BR约翰内斯

gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
嗨PM_Dialog,

嗨PM_Dialog,

[任何新闻?任何想法,我怎么能解决这个问题?说明核查与臭氧将是巨大的。]

编辑:
在代码lenghty调查后,我注意到,在

空隙wkup_ad_cb(无效)

只检查寄存器P1和P2。然后我在UM-B-101第20页看到它说:

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

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

edit2:
我已经修改了回调函数,只是根据添加端口0的条件下,它似乎没有工作的一个缺陷。
这是非常不幸花了多长时间,我发现了这一点。当然,这是记录......但我万万没有想到的实现是不完整的。我会很好奇,想明白其中的道理。

BR约翰内斯

PM_Dialog
离线
最后一次露面:1天22小时前
职员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

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

// IO Ports register volatile uint32_t *ptr_P1 = (volatile uint32_t *)P1_DATA_REG; // IO Ports register volatile uint32_t *ptr_P1 = (volatile uint32_t *)P1_DATA_REG;volatile uint32_t *ptr_P2 = (volatile uint32_t *)P2_DATA_REG;

谢谢,PM_Dialog

gme_johannes
离线
最后一次露面:4个月1个星期前
加入:2017-12-22 10:09
嗨PM_Dialog,

嗨PM_Dialog,

因为我已经写在第二个编辑,我已经解决了这个问题。这是不成问题得到端口0上的中断,毕竟。

谢谢,

约翰内斯