【Esp32】Spi接口驱动SX1268模块
- 1.硬件接线
 - 2. SX1268 模块的 SPI 时序分析
 - 3. 基于 ESP32 实现函数封装
 - 3.1 读寄存器
 - 3.2 写寄存器
 
- 4. 实验结果
 
日期: 2023-01-13
项目需要用乐鑫的 ESP32开发板驱动 Lora 模块,用的是  深圳SX1268ZTR4-GC的lora模块,
由于网上的参考资料大部分都是基于STM32驱动的,
本文实现了基于ESP32的SPI3接口驱动 sx1268 模块实现数据的收发。
用两个 esp32 + sx1268 模块的形式
 
1.硬件接线


2. SX1268 模块的 SPI 时序分析
开始传输数据时,拉低NSS引脚(spi协议中的CS引脚),传输完之后,拉高引脚
 Spi:模式0,全双工通信

3. 基于 ESP32 实现函数封装
封装读写字节函数:
bool spi_read_byte(uint8_t* rx_data, uint8_t* tx_data, size_t DataLength )
bool spi_write_byte(uint8_t* tx_data, size_t DataLength )
 
虽然叫 read_byte 但是可以当做读写使用。
 当写字节时,rx_data = NULL;即可
 当读字节时,先发送一个tx_data,再将读到的字节存到 rx_data中。为什么这么封装呢?
封装传输字节的函数:
uint8_t spi_transfer(uint8_t address)
 
当写字节时,参数address 表示写的内容,此时,函数的返回值无意义
 当读字节时,address = 0,返回值表示,读取到的字
3.1 读寄存器

解释:NOP指的是空操作指令,相当于主机执行一次 write ,但是write的字节为0
读寄存器:比如读寄存器 addr 开始的2个字节,
spi_transfer(cmd)
spi_transfer(addr高四位)
spi_transfer(addr低四位)
spi_transfer(0)
rx_data[0] = spi_transfer(0);
rx_data[1] = spi_transfer(0);
 
3.2 写寄存器

spi_transfer(cmd)
spi_transfer(addr高四位)
spi_transfer(addr低四位)
spi_transfer(data[n]);     // n = 0……x
 
4. 实验结果
实现2个模块的数据收发,
 实测距离10m左右,发数据太快会存在丢包现象
 
 若有错误,希望提出批评指教,在评论区留言或者私聊均可。


















