你好,
在我们的定制PCB中,我们使用SPI将一个Dialog 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.在config目录中添加一个platform_devices.h文件,并定义一个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 - collisions .
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的peripheral _init函数中,为SPI配置pin:
如果1号
// Proto1 - ok
#定义SPI_CLK_PORT HW_GPIO_PORT_1
#定义SPI_CLK_PIN HW_GPIO_PIN_3
#定义SPI_DI_PORT HW_GPIO_PORT_0
#定义SPI_DI_PIN HW_GPIO_PIN_7
#定义SPI_DO_PORT HW_GPIO_PORT_2
#定义SPI_DO_PIN HW_GPIO_PIN_3
#定义LSM6DSL_CS_PORT HW_GPIO_PORT_4
#定义LSM6DSL_CS_PIN HW_GPIO_PIN_7
其他#
// pro2 -启动时崩溃
#定义SPI_CLK_PORT HW_GPIO_PORT_4
#定义SPI_CLK_PIN HW_GPIO_PIN_1
#定义SPI_DI_PORT HW_GPIO_PORT_1
#定义SPI_DI_PIN HW_GPIO_PIN_7
#定义SPI_DO_PORT HW_GPIO_PORT_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);
hw_gpio_configure_pin_power (SPI_CLK_PORT SPI_CLK_PIN,
HW_GPIO_POWER_VDD1V8P);
hw_gpio_configure_pin (SPI_DI_PORT SPI_DI_PIN,
HW_GPIO_MODE_INPUT HW_GPIO_FUNC_SPI_DI 1);
hw_gpio_configure_pin_power (SPI_DI_PORT SPI_DI_PIN,
HW_GPIO_POWER_VDD1V8P);
hw_gpio_configure_pin (SPI_DO_PORT SPI_DO_PIN,
HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_SPI_DO 1);
hw_gpio_configure_pin_power (SPI_DO_PORT SPI_DO_PIN,
HW_GPIO_POWER_VDD1V8P);
hw_gpio_configure_pin (LSM6DSL_CS_PORT LSM6DSL_CS_PIN,
HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO 1);
hw_gpio_configure_pin_power (LSM6DSL_CS_PORT LSM6DSL_CS_PIN,
HW_GPIO_POWER_VDD1V8P);
使用我们旧的Proto1 PCB的引脚分配,pxp_reporter应用程序在连接到LSM6DSL的Pro DK上运行良好。如果从Proto2 PCB更改新的引脚分配,pxp_reporter应用程序将在引导时崩溃。
以下是我发现的其他一些东西:
1.如果我注释掉#define dg_configPOWER_1V8P,它就会运行而不会崩溃
2.如果我没有将芯片选择线连接到LSM6DSL,它会在引导中存活而不会崩溃
以下是一些问题:
1.是否只有1468x上的某些引脚可用于SPI?
2.为了正确使用SPI,我是否忘记在1468x上配置一些东西?
3.如果我能在引导期间将我们用作“SPI芯片选择”的1468x上的引脚设置为输出(而不是默认的输入-下拉),我可能能够避免崩溃。这是可能的吗?
4.另一种解决方法可能是延迟启动1V8P直到引导完成(并且peri_init有机会将芯片选择引脚设置为输出)。是否有一个我可以调用的API,在运行时启用1V8P ?
非常感谢,
大卫

嗨david_33021,
1)不,对于用于SPI接口的引脚没有特殊的限制,所有的引脚都可以配置并用于SPI接口(除了一些特殊的引脚,比如用于QUAD SPI的P0端口的第一引脚)。我测试了P3_0作为SPI设备上的CS,没有看到任何问题。也许您可以尝试在不同的SPI外围设备上执行相同的操作,并检查是否可以复制该问题。
2)不,为了使用SPI,我没有看到任何从配置中缺失的东西。
3)您可以在OTP标头中烧毁TCS标志,以便在引导时使GPIO处于不同的配置,但在您的问题中应该有其他情况。
4)当引导加载程序运行时,1V8P被配置为活动的,所以你不能那样做。
关于你的问题,你能在设备开机的时候检查一下1V8P上的电压吗?检查一下轨道上是否有电压跳水?你在这个设备的CS上有一个上拉吗?
由于MT_dialog
嗨MT_dialog,
非常感谢您的回复。我将尝试不同的SPI外围设备,并根据您的建议在引导期间检查1V8P上的电压。
我们没有在我们的CS线上添加一个外部拉起到设备,但我检查了LSM6DSL的数据表,LSM6DSL在CS线上有一个内部拉起。
谢谢,
大卫
嗨MT_dialog,
我在引导期间检查了示波器上的1V8P,使用DA1468x Pro DK与我们的Proto2引脚分配连接到LSM6DSL。
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在没有电压下降的情况下所能提供的电力,所以当电压下降时,brown out检测器启动并重置板(1.65V是1V8P的典型值)。这听起来更像是短路。为什么只有当你在P3_0上有CS时才会发生这种情况,这很奇怪,因为这两个引脚之间没有限制或任何类型的差异,你试过使用另一个传感器吗?或者探查P3_0,你是否看到线路切换或从68x设备驱动,你能否检查线路的任何切换是否与1V8P下降到1V的事实相关?您还可以测量电源1V8P上的电流,也可以测量CS上的电流,并检查在引导期间是否有电流冲击。
另外,我想从以前的帖子中评论一些东西,(我不认为它必须与您当前的问题做任何事情,但你应该注意,以避免任何未来的问题,你可能会有),如在数据表引脚P1_0, P1_5和P1_7上所示,如果切换时RF活动,可能会影响无线电性能。建议在低速时使用,而不是在无线电处于激活状态时使用。
由于MT_dialog
嗨MT_dialog,
谢谢你的意见。我们会按照你的建议调查的。
另外,感谢您指出P1_7对高速切换非常敏感。我们在da14680 /681-01- knownlimits文档中注意到,我们应该避免P1_0和P1_5,但是knownlimits文档没有提到P1_7,因此我们在数据表中遗漏了它。
大卫
嗨MT_dialog,
我使用write_tc烧制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构建。有发现我会通知你的。
谢谢,
大卫