分享

LoRa开发|LoRa(SX1276/8)串口透传代码

 goodwangLib 2020-07-04

一、前言

        嵌入式开发中我们要时刻保持代码的高效与整洁。2020年,开年注定不平凡,新型冠状肺炎的出现哪里也去不了,在家无聊写点东西吧。最近和一友人聊天,友人一直在抱怨学习lora没有前途,一直在纠结要不要学习,我只是默默的听着,然后笑一下当做什么都没听见。LoRa是一种通信技术不是一种职业,学不学他都在那里,而且LoRa本身也不难,spi接口,手册还是中文的。目前国内无线通信产品中,NBIOT和LoRa基本各占一半。鉴于这些问题,现在开放一个LoRa转UART的代码,这也是大家在调试LoRa点对点通信中最喜欢用的代码。目前网络上的代码很多也很多,根本不适合学习或者是项目使用,很有有代码对程序框架有所追求。

二、程序编写思路

三、SX1278分析

         通过引脚定义可以看出,重点的引脚就是SPI通信接口,RESET复位引脚,RXTX收发切换引脚,DIO0-DIO5。目前市面上的模组基本上在硬件上实现收发自动切换,不需要额外关心,有些没有实现自己增加引脚控制切换即可。以安信可的Ra-01为例,该模组已经实现了收发硬件自动切换,所以不需要额外的关心。

DIO0-DIO5引脚映射关系:

通过手册引脚映射可见:如果只是实现LoRa的收发数据只需要用到DIO0应交即可,不需要其他引脚。

综上所述:LoRa驱动移植所需要的IO口

1.SPI通信接口4线;

2.芯片复位引脚;

3.DIO0中断检测引脚:

4.软定时器:发送超时,接收超时,CAD检测超时:

四、LoRa代码移植

LoRa驱动接口,并将LoRa封装成驱动

  1. static struct cola_device_ops radio_ops =
  2. {
  3. .config = radio_config,
  4. .control = radio_ctrl,
  5. .write = radio_write,
  6. .read = radio_read,
  7. };
  8. void radio_bsp_init(void)
  9. {
  10. spi_dev = cola_device_find("spi1");
  11. assert(spi_dev);
  12. dio0_dev = cola_device_find("sx1276_dio0");
  13. assert(dio0_dev);
  14. cola_device_cfg(dio0_dev,sx1276_dio0_exit,0);
  15. reset_dev = cola_device_find("sx1276_reset");
  16. assert(reset_dev);
  17. cola_fifo_init(&radio_fifo_rx,radio_buf_rx,sizeof(radio_buf_rx));
  18. cola_fifo_init(&radio_fifo_tx,radio_buf_tx,sizeof(radio_buf_tx));
  19. cola_fifo_init(&radio_fifo_tx_cnt,radio_buf_tx_cnt,sizeof(radio_buf_tx_cnt));
  20. tmer_init();
  21. }
  22. void board_setup_radio(void)
  23. {
  24. radio_bsp_init();
  25. radio_init();
  26. radio_dev.name = "lora";
  27. radio_dev.dops = &radio_ops;
  28. cola_device_register(&radio_dev);
  29. }
  30. late_initcall(board_setup_radio);

应用层调用:

  1. /**
  2. ******************************** cola os *********************************
  3. * @file : app.c
  4. * @author : sunny.Bit(QQ 1506564994)
  5. * @brief : uart2lora
  6. ******************************************************************************/
  7. #include "config.h"
  8. #include <string.h>
  9. #include "app.h"
  10. #include "cola_device.h"
  11. #include "cola_os.h"
  12. static task_t uart_task;
  13. static cola_device_t *uart_dev;
  14. static cola_device_t *radio_dev;
  15. static uint8_t tmp[128] = {0};
  16. static void uart_task_cb(uint32_t event)
  17. {
  18. int err = 0;
  19. if(event&SIG_DATA)
  20. {
  21. err = cola_device_read(uart_dev,0,tmp,sizeof(tmp));
  22. if(err)
  23. {
  24. err = cola_device_write(radio_dev,0,tmp,err);
  25. }
  26. }
  27. if(event&SIG_RADIO_DATA)
  28. {
  29. err = cola_device_read(radio_dev,0,tmp,sizeof(tmp));
  30. if(err)
  31. {
  32. cola_device_write(uart_dev,0,tmp,err);
  33. }
  34. }
  35. }
  36. void uart_to_radio_task_init(void)
  37. {
  38. extern void uart_dev_init(void);
  39. extern void radio_dev_init(void);
  40. uart_dev_init();
  41. radio_dev_init();
  42. cola_task_create(&uart_task,uart_task_cb);
  43. }

五、下载链接

假期在家用不了git,直接上传到csdn了,正在审核。

下载链接:https://download.csdn.net/download/ziqi5543/12128753

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多