将IoT MultiSensor移植到ISM14585模块

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
11个帖子/ 0个新帖子
最后发表
gme_johannes
离线
最后看到:3周1天前
加入:2017-12-22 10:09
将IoT MultiSensor移植到ISM14585模块

亲爱的对话支持,

我们正在使用新的Inventek ISM14585模块。我们希望使用BMI160(稍后添加BMM150)将MSK固件端口移植到此模块。在MultiSensor DK上,我已成功用BMI160替换了ACC / Gyro并获得运行。

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

观察

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

(2)我已经停用了大多数env的例程。在代码中的传感器和磁力计。当我启动固件时,并与IOT应用程序连接,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,我发现MultiSensor DK实际上使用了处理某些配置步骤的二级引导加载程序;但是,我对BMI160对此至关重要,这对BMI160至关重要(而且它对原来的ACC / Gyro做了一些配置)。
在ISM14585中,OTP用辅助引导加载程序刻录,因为内部闪存CS被映射到P0_7而不是P0_3(因此它不会在没有此的DEV模式下启动)。

我的问题

(1)是什么原因我没有看到从BMI160中断到低?
(2)是必要的特殊二级引导程序吗?我可以通过将生成的十六进制文件闪烁到闪存中来端口固件吗?

非常感激你的帮助。

BR Johannes.

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

嗨,约翰,

请告诉我哪个GPIO连接到BMI160,所以我可以在我身边运行它。

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

我不是使用传感器物联网标记固件作为应用程序的起点的大粉丝。你将留下很多一半的支持代码,最终会咬你。更好的方法是使用extent_peripheral_template项目并慢慢将代码移动到该项目中。

/ mhv.

gme_johannes
离线
最后看到:3周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。:
二级引导加载程序已被制造商英业达(Inventek)烧毁到OTP。我会和他们讨论为什么他们没有按照你的建议去做。也许这是个误会。
我知道如何配置SmartSnippets,毕竟我有固件运行和广告(从flash启动)。
在UM-B-101中,MS DK二级引导加载程序[…]

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

这就是为什么我询问这个​​特定引导加载程序的必要性。从调入代码,我是在印象中,引导加载程序为ICM42605配置了一些东西,但不适用于选项填充的BMI160。

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

BR Johannes.

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

嗨,约翰,

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

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

/ mhv.

gme_johannes
离线
最后看到:3周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)我用臭氧检查行为(扰流板:我第一次使用它)。一个断点

void si_setup_interrupts(si_list_entity_t * ptr)

在文件Sensors_Interface.c中显示了中断确实已配置。一个断点

无效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);

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

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

BR Johannes.

编辑:

(a)我在运动特征上使能尾流也是一样的。我可以观察到设备进入休眠状态,中断率很低。当我移动传感器,引脚确实很高,但固件没有反应它。
(b)我取消了这些测试的睡眠模式。

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

亲爱的对话支持,

我还在迫切等待答案。什么可能是中断不工作的原因?如何使用臭氧进一步调查此问题?

BR Johannes.

PM_DIALOG.
离线
最后看到:16小时54分钟前
工作人员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

我为耽搁道歉。我完全同意MHv_Dialog,我认为最好的方法是使用empty_peripheral_template项目,慢慢地将代码片段移到该项目中。但是,我会在团队内部获得他们的反馈。我会尽快回复你的。

谢谢,PM_DIALOG.

gme_johannes
离线
最后看到:3周1天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

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

BR Johannes.

gme_johannes
离线
最后看到:3周1天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

(有什么消息吗?有办法解决这个问题吗?说明验证与臭氧将是伟大的。

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

空白wkup_ad_cb(空白)

仅检查寄存器P1和P2。然后我在UM-B-101中看到了这个问题:

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

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

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

BR Johannes.

PM_DIALOG.
离线
最后看到:16小时54分钟前
工作人员
加入:2018-02-08 11:03
嗨gme_johannes,

嗨gme_johannes,

根据UM-B-101文档,585 MSK固件扩展了中断处理的可能性,以便唤醒。目前,此模块支持端口1和2中的中断,因为端口0保留用于其他范围。请记住,585 MSK旨在与MSK硬件一起使用。请看一下表1UM-B-101:DA14585 IOT多传感器开发套件开发人员指南文档以检查端口0分配。此外,如果检查WKUP_AD_CB()的源代码,则会看到端口1和2配置了。

// IO端口寄存器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
离线
最后看到:3周1天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

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

谢谢,

约翰内斯