OpenWRT系统(二) - LoRa基站开发


这篇文章主要记录lora原型基站开发的过程,基站支持对接市场上默认的 LoRaWAN Server,支持有线口回传,支持4G回传。

架构

  • 步骤
    • CPU 移植运行 OpenWRT 系统,有线口正常,这块我是基于现成的,此处省略
    • 调试 SX1301 芯片驱动
    • 移植 Semtech 公司开源的 packet_forwarder 到 OpenWRT 平台,对接通用的 LoRaWAN Server
    • 调试移植4G模块驱动
  • 硬件组成:CPU 使用 SOC AR95xx 系列芯片,通过 SPI 接口跟基带芯片通信,LoRa 基带射频使用 Semtech 公司的多路芯片 SX1301 + SX1255,4G 模组使用龙尚 U8300
  • 软件:平台 OpenWRT ,版本 Attitude Adjustment 12.09,内核 3.3.8
  • 报文流程
    • AR95xx 通过 HAL 模块的 SPI 读写操作控制 SX1301 接收终端发送的报文,经过 packet forwarder 模块封装打包后走有线口、WIFI 或 4G 通路,通过UDP方式发送给后台 LoRaWAN Server。
      网络架构

LoRa 芯片驱动调试

AR9531 可以通过 USB 或 SPI 驱动 SX1301,USB方式需要FTDI转 SPI 芯片方式网上教程较多。由于板子限制,这里采用 SPI 方式,由于板子的 SPI 控制器已经用来驱动 flash,控制 SX1301 有两种方式:

  • GPIO 模拟 SPI 来控制(软 SPI )
  • 实际的硬件 SPI 通过片选控制

为提高调试效率,先修改Makefile的 cmdline 字段波特率,以串口 ttyS0 为例下面命令可以查找包含 ttyS0 对应行,使用 VIM 修改成 115200。

grep ttyS0 ./target/linux/ar71xx/image/Makefile

GPIO 模拟 SPI

参考
https://randomcoderdude.wordpress.com/2013/08/15/spi-over-gpio-in-openwrt/

  • GPIO 管脚使用

先确认 GPIO 管脚是否可用,是否能拉高拉低

cat /sys/kernel/debug/gpio  # 查看 GPIO 调试信息
cd /sys/class/gpio   
echo 2 > export   # 把 GPIO 管脚 2 导出到用户空间
cd gpio2
echo out > direction   # 配置成输出
echo 0 > value   # 输入值 0
cat value    # 查看值是否改变
echo 1 > value  # 输入值 1
cat value

如果CPU用到对应 GPIO 口存在 JTAG 复用的话,芯片初始化 GPIO 时把 JTAG 关掉

//文件:linux-3.3.8/arch/mips/ath79/gpio.c
//函数:ath79_gpio_init
if (soc_is_qca953x())
    ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE);
  • 移植编译内核模块

    OpenWRT 内核默认就已经有 GPIO 模拟 SPI 的驱动模块(spi-gpiospi-bitbang),另外有spi-dev 设备层通用驱动,用来导出到用户空间,编译内核前把这三个模块打开。spi-dev 模块问题是不大方便调试,建议下载移植 spi-gpio-custom 模块用于动态加载软 SPI 模块,根据对应 GPIO 管脚加载。
    menuconfig配置

    # 参数说明
    * bus0    These four arguments can be arrays of
    * bus1    1-8 unsigned integers as follows:
    * bus2
    * bus3    <id>,<sck>,<mosi>,<miso>,<mode1>,<maxfreq1>,<cs1>,...
    * where:
    *
    * <id> ID to used as device_id for the corresponding bus (required)
    * <sck> GPIO pin ID to be used for bus SCK (required)
    * <mosi> GPIO pin ID to be used for bus MOSI (required*)
    * <miso> GPIO pin ID to be used for bus MISO (required*)
    * <modeX> Mode configuration for slave X in the bus (required)
    * (see /include/linux/spi/spi.h)
    * <maxfreqX> Maximum 
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值