请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC3100 您好!
我正在尝试将 simplelink 驱动程序移植到 stm32f0。
当 simplelink 驱动程序在 sl_start 中的第一次接收期间检查接收到的 SPI 数据中的同步模式时、它会出现硬故障。 我发现该故障是由于它用于比较数据的方法造成的。 驱动程序会将_u8缓冲区转换为_u32缓冲区、以便一次可以检查4个字节。 请参阅 driver.c 中的以下代码:
#ifndef sl_if_type_uart
/* 1. 仅在 SPI 模式下工作时、将 CNYS 模式写入 NWP *
NWP_IF_WRITE_CHECK (g_PCB->FD、(_u8 *)&g_H2NCnysPattern.short、SYNC_pattern_LEN);
#endif
(!defined (sl_Tiny)))&&(defined (sl_GetTimestamp)))
_SlDrvStartMeasureTimeout (&TimeoutInfo、SYNC_pattern_timeout_in_msec);
#endif
/* 2. 读取8个字节(协议对齐)-预期为同步模式*/
NWP_IF_READ_CHECK (g_PCB->FD、&pBuf[0]、8);
_sl_DBG_SYNC_LOG (SyncCnt、pBuf);
/*在前4个字节与后4个字节不同时读取*/
while (*(_u32 *)&pBuf[0]=*(_u32 *)&pBuf[4])<--- 一个示例
{
NWP_IF_READ_CHECK (g_PCB->FD、&pBuf[4]、4);
}
/*扫描同步模式直至找到或超时(如果已配置)*/
while (SearchSync && TimeoutState)
{
/*扫描直到我们得到真正的同步模式*/
for (ShiftIdx =0;ShiftIdx <=4;ShiftIdx++)
{//
////找到同步模式,以便完成对齐的4个字节的读取*/
if (N2H_SYNC_pattern_match (&pBuf[ShiftIdx],g_PCc->TxNum---)--> 此处
{
/*将同步模式之后的字节复制到缓冲区起始位置*/
*(_u32 *)&pBuf[0]=*(_u32 *)&pBuf[ShiftIdx + SYNC_pattern_LEN];<--- 此处
//读取字节的其余部分*/
NWP_IF_READ_CHECK (g_PCB->FD、&pBuf[SYNC_pattern_LEN - ShiftIdx]、ShiftIdx);
//此处除了获取操作码+长度或错误加倍同步之外。*/
SearchSync = false;
break;
}
Debug_printf ("iterator:%i\n"、ShiftIdx);
}
我发现该故障是因为使用的 ARM M0处理器没有通过此代码所需的边界访问数据所需的硬件。 这是否是 Simple Link 的已知问题、是否有解决方法?
由于我意识到这是一个问题、我成功地将简单链接移植到 STM32F7。 因此,我很有信心,问题是我所说的。
谢谢
胡