将IoT MultiSensor移植到ISM14585模块

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

亲爱的对话支持,

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

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

观察

(1)我不得不undef USE_SPI_FLASH_CONFIG,否则I got a hard fault (waiting for SPI to read the flash). I don't know what the problem could be. The internal flash of ISM14585 is a GigaDevice GD25D series.

(2)我已经停用了大多数env的例程。在代码中的传感器和磁力计。当我启动固件时,并与IOT应用程序连接,UART显示以下内容:

======== IOT +开始========信息:传感器启动信息:传感器暂停信息:adv启动,值:160信息:IoT +连接信息:传感器启动信息:传感器暂停信息:dws cmd:21信息:DWS CMD:22信息:DWS CMD:11信息:DWS CMD:1信息:传感器启动信息:DWS CMD:17信息: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个月4周前
职员
加入:2013-12-06 15:10
嗨Johannes,

嗨Johannes,

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

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

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

/ mhv.

gme_johannes
离线
最后一次露面:3周2天前
加入: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的二级引导加载程序。我会与他们讨论为什么他们没有按照你建议这样做。也许这是一种误解。
我知道如何配置SmartSnippet,毕竟我拥有固件运行和广告(从Flash启动)。
在UM-B-101中,表示MS DK次级引导加载程序[...]

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

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

对于我们以前的原型,这是基于Murata Zy的原型,我们已经移植了“旧”物联网传感器SDK,这恰好好了。当然从划痕开始是一个更清洁的解决方案,但使用有限的人力,剥去现有的项目是更快的方法......

BR Johannes.

mhv_dialog.
离线
最后一次露面:2个月4周前
职员
加入:2013-12-06 15:10
嗨Johannes,

嗨Johannes,

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

我今天晚些时候直接与您联系,以帮助排除故障。

/ mhv.

gme_johannes
离线
最后一次露面:3周2天前
加入:2017-12-22 10:09
嗨mhv,

嗨mhv,

I have some more findings.

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

void periph_init(void) { // Power up peripherals' power domain SetBits16(PMU_CTRL_REG, PERIPH_SLEEP, 0); while (!(GetWord16(SYS_STAT_REG) & PER_IS_UP)); SetBits16(CLK_16M_REG, XTAL16_BIAS_SH_ENABLE, 1); //rom patch patch_func(); //Init pads set_pad_functions(); // (Re)Initialize peripherals iot_dk_spi_init(ACCEL_CS_PORT, ACCEL_CS_PIN, SPI_XTAL_DIV_2);

(2)我观察MISO,MOSI,CLK,CS与示波器的emcted活动。SPI似乎很好。

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

Following the observation (3) I have inspected the behavior with Ozone (spoiler: I used it for the first time). A breakpoint in

void si_setup_interrupts(si_list_entity_t * ptr)

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

void si_gpio_irq_cb(uint8_t端口,uint32_t引脚)

then shows that the callback is never executed, although the pin goes HIGH. The pin is correctly configured according to our schematic:

#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周2天前
加入:2017-12-22 10:09
亲爱的对话支持,

亲爱的对话支持,

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

BR Johannes.

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

嗨gme_johannes,

我为延迟道歉。我完全同意mhv_dialog,我认为最好的方法是使用empty_peripheral_template项目并慢慢将代码移动到该项目中。但是,我将在内部努力获得反馈。我会尽快回复你。

谢谢,PM_DIALOG.

gme_johannes
离线
最后一次露面:3周2天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

considering how much our project has in common with the MultiSensor DK (everything except for: missing env sensors, different magnetometer, different pinout, different flash/PA), I hope that you can understand that I still favor the approach of stripping down/modifying the MultiSensor DK. I hope that you have some ideas how to investigate why I don't see the interrupt.
也许我应该开始使用empty_peripheral_template测试中断功能本身。

BR Johannes.

gme_johannes
离线
最后一次露面:3周2天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

[任何新闻?任何想法如何解决这个问题?臭氧验证说明将是很棒的。]

编辑:
在代码中的长期调查之后,我注意到了

void wkup_ad_cb(void)

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

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

Can you please tell me - urgently - if interrupts on port 0 are not possible? What is the restriction here? SDK6? MultiSensor DK? DA14585?

编辑2:
我已经修改了回调函数并刚刚根据端口0的条件添加,似乎没有缺陷的工作。
这是非常不幸的是我找到这一点需要多长时间。当然,它被记录在内......但我永远不会猜到实施是不完整的。我非常好奇地理解原因。

BR Johannes.

PM_DIALOG.
离线
最后一次露面:1天7小时前
职员
加入: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周2天前
加入:2017-12-22 10:09
嗨pm_dialog,

嗨pm_dialog,

正如我在第二个编辑中写的那样,我已经解决了这个问题。毕竟在端口0上获取中断是毫无疑问的。

Thanks,

约翰内斯