你好,
在我们的定制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 sp1 CLK: P1_3 -> LSM6DSL SCL
DA1468x SPI1 DI: P0_7 -> LSM6DSL SDO
功能描述:DA1468x sp1 DO: P2_3 -> LSM6DSL SDA
DA1468x CS: P4_7 -> LSM6DSL CS
引脚连接按照我们的Proto2 PCB(启动时崩溃)
DA1468x sp1 CLK: P4_1 -> LSM6DSL SCL
DA1468x SPI1 DI: P1_7 -> LSM6DSL SDO
功能描述:DA1468x sp1 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文件到配置目录,并定义一个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的外围_init函数中,为SPI配置引脚:
如果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
其他#
// Proto2 -启动时崩溃
#定义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.如果我能在我们使用的1468x上设置引脚作为“SPI芯片选择”作为引导期间的输出(而不是默认的输入-下拉),我可能能够避免崩溃。这是可能的吗?
4.另一个解决方案可能是延迟1V8P的启动直到引导完成(并且外围init有机会设置芯片选择引脚作为输出)。是否有一个API我可以调用在运行时启用1V8P ?
非常感谢,
大卫
嗨david_33021,
1)不,没有特殊限制的针一个可以使用SPI接口,可以配置所有的针和用于SPI接口(除了几个特殊针像第一针的P0端口用于例如四SPI)。我测试了将P3_0作为SPI设备上的CS,没有看到我这边的任何问题。也许您可以尝试用不同的SPI外设做同样的事情,并检查是否可以复制这个问题。
2)不,我没有看到任何从配置中缺少为了使用SPI。
3)你可以烧TCS标志在OTP头,以使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通过启动(也当我重置Pro DK与开关K2)。
2)连接CS线后,当我松开Pro DK的复位开关(K2)后,1V8P立即以1.8V启动,然后在不到200 ms的时间内下降到大约1V。在这一点上,1V8P立即回到1.8V,然后再次回落到1.0V,无限期重复这个模式(大概是由于1468x处于崩溃和重启周期)。
谢谢,
大卫
嗨david_33021,
这意味着由于某种原因你有附加的传感器开发工具包或原型板画了一些权力,超过1 v8p可以提供没有电压降,所以当启动电压降了布朗探测器,重置董事会(1.65 v的典型值是1 v8p)。听起来更像是短路。为什么这只发生在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-KnownLimitations文档中观察到,我们应该避免P1_0和P1_5,但是KnownLimitations文档没有提到P1_7,我们在数据表中漏掉了它。
大卫
嗨MT_dialog,
我烧OTP使用write_tcs设置我们的SPI时钟引脚,P4_1,作为输出,最初逻辑高。有了这个改变,我们在Pro DK上的Proto2设置和我们的Proto2 pcb(到目前为止我已经测试了两个)能够正常启动并运行。耶!
谢谢,
大卫
嗨david_33021,
很高兴你找到了你的方法,谢谢分享,但是,只是出于好奇,你知道为什么通过设置TCS的P4_1高与你的设置?
由于MT_dialog
嗨MT_dialog,
不,很不幸,还没有。看起来很奇怪,我们可以在DA1468x pro kit上重现这个问题。我们购买了另一块LSM6DSL断接板来连接到DA1468x pro套件,并发现了同样的问题,所以这不是我们特定的LSM6DSL断接的一次性问题。我们在Proto2版本中的每一个pcb都有问题,而Proto1版本中的所有pcb(相同的DA14680和LSM6DSL以及相同的软件,只是在DA1468x上使用不同的引脚)都很好。
我们仍在调查,为我们(希望)最终的PCB建造做准备。有什么发现我会告诉你的。
谢谢,
大卫