Other Parts Discussed in Thread:CC3120, CC3100
CC3120 移植驱动到MCU ,执行sl_start()后返回F82B ,也就是-2005,含义为SL_API_ABORTED ,问一下这个问题说明我程序中那个地方移植的有问题。TI的朋友帮忙看看,给点建议,我好排查代码,我单步调试,发现SPI可以正常的读写数据,底层SPI和GPIO驱动应该是正常的。
user6105077:
我有一个问题不明白,我创建一个任务运行sl_task任务,该任务会阻塞在等待信号量上,该任务的优先级较高,然后我会调动sl_start函数,该函数内部也会等待信号量,但是sl_task的优先级较高,所以来了信号量后会被sl_task任务获取,导致sl_start函数得不到信号量最终被阻塞,我看你们的例程中就是这么写的,这正常吗,目前我的代码运行到sl_start函数就会被阻塞到获取信号量上。
,
Viki Shi:
sl_task等待的同步对象不应该与sl_start API等待的同步对象相同。我怀疑你的cc_pal.c或移植层的user.h有问题。目前官方没有CC3120移植到STM32的例程,有个CC3100的供参考:www.ti.com/…/CC3100SDK这个SDK里包含主机驱动程序移植到STM32的端口,以及一个示例demo。虽然CC3100和CC3120之间的主机驱动程序略有不同,但是就所需的同步对象而言,大多数移植步骤是相同的。建议查看一下CC3100 STM32端口,并将其与CC3120的端口进行比较。
后面还有问题可以在本帖讨论,请勿重复发帖,谢谢
,
user6105077:
我重新 移植了一下驱动,目前sl_start()函数可以执行过去,但是出现了一个新问题,sl_start()的返回值为-2005,我单步调试了一下程序,发现当运行进sl_start()函数时,会在_SLDrvSyncObjWaitTimeout()函数中返回-2005.下边是该函数的代码:
_SLReturnVal_t_SLDrvSyncObjWaitTimeout()
{
_SLReturnVal_t ret = SL_SyncObjWait();
if(ret)
{
_SLDrvHandleFataError();
return(SL_API_ABORTED);
}else if(SL_IS_RESTART_REQUIRED)
{
函数执行到这里返回的-2005
return (SL_API_ABORTED);}
return(SL_RET_CODE_OK);
}
麻烦帮忙分析一下,什么原因会导致这种问题的发生,谢谢。
,
user6105077:
STM 32主频120M HZ , 使用的SPI1 位于APB2总线,总线主频60MHZ , SPI 1配置的64分频,SPI 的时钟只有不到1M HZ 这个频率小于20M HZ
不是频率的问题,帮忙分析一下还有什么情况会导致出现 SL_DEVICE_EVENT_FATAL_SYNC_LOSS 错误。
,
user6105077:
好的麻烦了,我的STM32主频120M HZ , 使用的SPI1 位于APB2总线,该总线时钟为60M HZ , 我配置的SPI1为64分频,所以SPI 时钟只有不到1M HZ ,不会是SPI频率太高的问题,请帮忙再分析一下,导致SL_DEVICE_EVENT_FATAL_SYNC_LOSS的原因,不胜感激。
,
Viki Shi:
上面那个-2005的报错看起来是由于同步丢失,这个报错通常是因为连接external MCU跟CC3210之间的SPI接口有问题。
建议你还是好好排查一下你的SPI这部分,包括你后来的报错都是跟SPI相关,几乎可以肯定问题就在这一块。CC3120芯片对于SPI的实现基本跟CC3100一样【上面有发CC3100移植到STM32的例程,建议参考】。另外推荐一个类似帖: e2e.ti.com/…/828191
,
user6105077:
非常感谢你们的帮助,问题已解决,确实是SPI接口的问题,谢谢。
,
RogerHuang:
VIKI你说的老外推荐一个类似贴,就是user6105077这个用户在TI英文论坛发的