你好
在我们的定制PCB中,我们使用SPI将对话DA1468x连接到ST Micro LSM6DSL。我们创建了第一个PCB原型“Proto1”,一切都很好。我们最近创建了第二个原型PCB“Proto2”,它将LSM6DSL连接到DA1468x上的不同引脚,1468x现在在引导时崩溃。
我能够使用1.0.12.1078 SDK中的pxp_reporter示例和AQFN包中带有DA14681的1468x Pro开发工具包重现问题。
引脚连接按照我们的Proto1 PCB(工作正常)
DA1468x SPI1 CLK: P1_3 -> LSM6DSL SCL
DA1468x SPI1 DI: P0_7 -> LSM6DSL SDO
DA1468x SPI1 DO: P2_3 -> LSM6DSL SDA
DA1468x CS:P4_7->LSM6DSL CS
根据我们的Proto2 PCB的引脚连接(在启动时崩溃)
DA1468x SPI1 CLK: P4_1 -> LSM6DSL SCL
DA1468x SPI1 DI: P1_7 -> LSM6DSL SDO
DA1468x SPI1 DO: P1_2 -> LSM6DSL SDA
DA1468x CS:P3_0->LSM6DSL CS
在这两个例子,
DA1468x 1V8P -> LSM6DSL VDD
DA1468x 1V8P -> LSM6DSL VDDIO
DA1468x GND -> LSM6DSL GND
为了重现该问题,按照上述配置之一,将Pro DK连接到LSM6DSL,然后修改pxp_reporter软件,如下所示:
1.从1.0.12.1078 SDK中的pxp_reporter示例开始
2.将以下定义添加到custom_config_qspi_suota.h:
#定义dg_configUSE_HW_SPI (1)
#定义dg_configSPI_ADAPTER (1)
#定义dg_configPOWER_1V8P (1)
3.添加一个platform_devices.h文件到config目录,并定义一个SPI总线和设备:
SPI_BUS (SPI1)
SPI_SLAVE_DEVICE (
SPI1 MY_LSM6DSL,
HW_GPIO_PORT_4, HW_GPIO_PIN_7, // Proto1 - ok
// HW_GPIO_PORT_3, HW_GPIO_PIN_0, // Proto2 -崩溃
HW_SPI_WORD_8BIT、HW_SPI_POL_HIGH HW_SPI_PHA_MODE_1,
HW_SPI_FREQ_DIV_2, 1);
SPI_BUS_END
4.在main.c中的peripher_init函数中,为SPI配置引脚:
如果1号
// Proto1 -好的
#定义SPI_CLK_PORT HW_GPIO_PORT_1
#定义SPI_CLK_引脚HW_GPIO_引脚3
#定义SPI_DI_PORT HW_GPIO_PORT_0
#定义SPI_DI_PIN HW_GPIO_PIN_7
#定义SPI_DO_端口HW_GPIO_端口2
#定义SPI_DO_PIN HW_GPIO_PIN_3
#定义LSM6DSL_CS_PORT HW_GPIO_PORT_4
#定义LSM6DSL_CS_PIN HW_GPIO_PIN_7
其他#
// Proto2 -启动时崩溃
#定义SPI_CLK_PORT HW_GPIO_PORT_4
#定义SPI_CLK_引脚HW_GPIO_引脚1
#定义SPI_DI_PORT HW_GPIO_PORT_1
#定义SPI_DI_PIN HW_GPIO_PIN_7
#定义SPI_DO_端口HW_GPIO_端口1
#定义SPI_DO_PIN HW_GPIO_PIN_2
#定义LSM6DSL_CS_PORT HW_GPIO_PORT_3
#定义LSM6DSL_CS_PIN HW_GPIO_PIN_0
# endif
hw_gpio_configure_pin (SPI_CLK_PORT SPI_CLK_PIN,
HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_SPI_CLK 1);
硬件gpio配置引脚电源(SPI时钟端口、SPI时钟引脚、,
硬件GPIO电源VDD1V8P);
hw_gpio_configure_pin (SPI_DI_PORT SPI_DI_PIN,
HW_GPIO_MODE_INPUT HW_GPIO_FUNC_SPI_DI 1);
硬件gpio配置引脚电源(SPI引脚端口、SPI引脚、,
硬件GPIO电源VDD1V8P);
hw_gpio_configure_pin (SPI_DO_PORT SPI_DO_PIN,
HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_SPI_DO 1);
硬件gpio配置引脚电源(SPI引脚端口、SPI引脚、,
硬件GPIO电源VDD1V8P);
hw_gpio_configure_pin (LSM6DSL_CS_PORT LSM6DSL_CS_PIN,
硬件GPIO模式输出,硬件GPIO函数GPIO,1);
硬件gpio配置引脚电源(LSM6DSL引脚,LSM6DSL引脚,
硬件GPIO电源VDD1V8P);
使用原Proto1 PCB的引脚分配,pxp_reporter应用程序在连接到LSM6DSL的Pro DK上运行良好。如果你从我们的Proto2 PCB更改到新的pin分配,pxp_reporter应用程序在引导时崩溃。
以下是我的一些发现:
1.如果我注释掉#define dg_configPOWER_1V8P,它就不会崩溃
2.如果我不将芯片选择线连接到LSM6DSL,它在引导时不会崩溃
这里有一些问题:
1.是否只有某些引脚在1468x SPI可用?
2.我是否忘记在1468x上配置一些东西以正确使用SPI?
3.如果我可以在引导期间将1468x上的引脚设置为“SPI芯片选择”作为输出(而不是默认的输入下拉),我可能能够避免崩溃。这可能吗?
4.另一个解决方案可能是将1V8P的启动延迟到引导完成之后(而peripe_init有机会将芯片选择引脚设置为输出)。我是否可以调用一个API来在运行时启用1V8P ?
非常感谢你,
大卫
嗨david_33021,
1) 不,可以用于SPI接口的管脚没有特殊限制,所有管脚都可以配置并用于SPI接口(除了一些特殊管脚,例如用于四SPI的P0端口的第一个管脚)。我在SPI设备上测试了P3_0作为CS,没有发现任何问题。也许您可以尝试使用不同的SPI外围设备执行相同的操作,并检查是否可以复制该问题。
2)不,我没有看到任何丢失从配置为了使用SPI。
3) 您可以烧录OTP头中的TCS标志,以便在引导时使GPIO处于不同的配置中,但您的问题应该是其他情况。
4)当引导加载程序运行时,1V8P被配置为活动的,所以你不能这样做。
关于你的问题,能否在设备启动时检查1V8P上的电压,检查导轨上是否有电压骤降?还有,你在设备的CS上有一个上拉吗?
由于MT_dialog
嗨MT_dialog,
非常感谢您的回复。我将尝试一个不同的SPI外设,并按照您的建议在引导期间检查1V8P上的电压。
我们没有在我们的CS线上添加一个外部拉上设备,但我检查了LSM6DSL的数据表,LSM6DSL在CS线上有一个内部拉上。
谢谢,
大卫
嗨MT_dialog,
在引导期间,我使用连接到LSM6DSL的DA1468x Pro DK和Proto2引脚分配,在示波器上检查了1V8P。
1) 在CS线路断开的情况下,1V8P是一个稳定的1.8V通电启动(以及当我用开关K2重置Pro DK时)。
2) 连接CS线路后,在我松开Pro DK的复位开关(K2)后,1V8P立即以1.8V的电压启动,然后在不到200毫秒的时间内降至约1V。此时,1V8P立即返回到1.8V,然后再次返回到1.0V,无限期地重复此模式(可能是因为1468x处于崩溃和重新启动周期)。
谢谢,
大卫
嗨david_33021,
这意味着,出于某种原因,您连接在开发套件或原型板上的传感器会消耗相当大的功率,超过1V8P在没有电压下降的情况下所能提供的功率,因此,当电压下降时,褐化检测器将启动并重置板(1V8P的典型值为1.65V)。这听起来更像是短路。现在,为什么只有在P3_0上有CS时才会发生这种情况是很奇怪的,因为这两个引脚之间没有限制或任何区别,您是否使用其他传感器尝试过这种情况?或者探测P3_0,您是否看到68x设备的线路切换或驱动,您能否检查线路的任何切换是否与1V8P降至1V的事实相关?您还可以测量电源1V8P上的电流和CS上的电流,并检查引导期间是否有电流冲击。
也想的东西从以前的文章评论,(我不认为这与你现在的问题,而是你做什么应该照顾,为了避免未来的任何问题,你可能有),数据表上所注明的别针P1_0, P1_5和P1_7可能影响无线电性能如果切换射频活动。建议在低速度下使用,而不是当无线电是活跃的。
由于MT_dialog
嗨MT_dialog,
谢谢你的意见。我们将按照你的建议进行调查。
另外,感谢您指出P1_7对高速切换非常敏感。我们在DA14680/681-01-KnownLimitions文档中观察到,我们应该避免P1_0和P1_5,但KnownLimitions文档没有提到P1_7,我们在数据表中遗漏了它。
大卫
嗨MT_dialog,
我使用write_tcs烧掉了OTP,将SPI时钟引脚P4_1设置为输出,初始逻辑为高。通过这一更改,我们在Pro DK上的Proto2设置和Proto2 PCB(到目前为止,我已经测试了两个)能够正常启动和运行。耶!
谢谢,
大卫
嗨david_33021,
很高兴您找到了自己的方法,感谢分享,但是,出于好奇,您知道为什么在TCS中设置P4_1的高值来操作您的设置吗?
由于MT_dialog
嗨MT_dialog,
不,不幸的是,还没有。我们可以在DA1468x pro套件上重现这个问题,这似乎非常奇怪。我们购买了另一个LSM6DSL接线板,连接到DA1468x pro套件上,观察到同样的问题,所以这不是我们特定的LSM6DSL接线板的一次性问题。我们Proto2构建中的每一个pcb都存在这个问题,而Proto1构建中的所有pcb(相同的DA14680和LSM6DSL以及相同的软件,只是在DA1468x上使用了不同的引脚)都很好。
我们仍在为最终的PCB构建做准备。有发现我会通知你的。
谢谢,
大卫