SX1302官方开源代码无法在NUC980主控芯片中使用SPI片选脚

Posted UCSD99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SX1302官方开源代码无法在NUC980主控芯片中使用SPI片选脚相关的知识,希望对你有一定的参考价值。

SX1302官方开源代码无法在NUC980主控芯片中使用SPI片选脚

情况说明
Sx1302代码:https://gitee.com/rejeee/gw1302s
NUC980DK61Y内核代码:官方提供的虚拟机镜像包(里面包含linux内核及交叉编译工具链)
SPI引脚使用:
在这里插入图片描述
在这里插入图片描述
如上图可见,使用了NUC980的SPI0口。使能SPI0口后,运行网关程序时,却始终反馈如下错误:

lgw_connect:1230: ERROR: NOT EXPECTED CHIP VERSION (v255)
ERROR: [main] failed to start the concentrator
Cycle 0 > error during the buffer comparison

经示波器检查发现片选脚无电平变化,但我们已经开启了SS0片选功能。仔细排查内核代码后,发现文件:

user@ubuntu:"Youself path"/NUC970_Buildroot-master/output/build/linux-master/arch/arm/mach-nuc980/dev.c

中有这样一段代码:

#ifdef CONFIG_SPI_SPIDEV
        {
                .modalias = "spidev",
                .max_speed_hz = 75000000,
                .bus_num = 1,
                #if defined(CONFIG_BOARD_IOT) || defined(CONFIG_BOARD_LORAG)
                .chip_select = 0,       //use SS0
                #else
                .chip_select = 1,       //use SS1
                #endif
                .mode = SPI_MODE_0,
        },
#endif

#if defined(CONFIG_BOARD_IOT) || defined(CONFIG_BOARD_LORAG)中我们可以看出,只有当配置文件为IOT与LORAG时,才会使用SS0片选脚。但我们在make menuconfig时配置的不是这两个文件,而是eth2uart文件。在这里插入图片描述
因此内核代码配置的是使用ss1而不是ss0。

解决方法
在if条件后加上defined(CONFIG_BOARD_ETH2UART),即:

#ifdef CONFIG_SPI_SPIDEV
        {
                .modalias = "spidev",
                .max_speed_hz = 75000000,
                .bus_num = 1,
                #if defined(CONFIG_BOARD_IOT) || defined(CONFIG_BOARD_LORAG) || defined(CONFIG_BOARD_ETH2UART)
                .chip_select = 0,       //use SS0
                #else
                .chip_select = 1,       //use SS1
                #endif
                .mode = SPI_MODE_0,
        },
#endif

同时通过make linux-menuconfig进入内核配置界面,在Device Drivers > Memory Technology Device (MTD) support界面下取消SPI-NOR device support配置。
在这里插入图片描述
重新编译后,即可成功连接服务器。
在这里插入图片描述

以上是关于SX1302官方开源代码无法在NUC980主控芯片中使用SPI片选脚的主要内容,如果未能解决你的问题,请参考以下文章

NUC980 调用GPIO口出现被复用错误

NUC980 调用GPIO口出现被复用错误

NUC980 调用GPIO口出现被复用错误

新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)

nuc980 emmc挂载失败

NUC980开源项目40-PLC远程下载/内网穿透(非技术)