单片机型号:STM32L053R8T6
本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍SPI总线驱动程序。
一、数据手册
1、关键点:
全双工SPI
CPOL=0,CPHA=0
从器件
写操作:地址字节+数据字节
读操作:直接发送地址字节,就可返回一个数据字节
NSS在整个帧传输过程保持低电平
MISO在NSS为高时为高阻态
SCK最大时钟16M
2、几个时序图,t10是指从睡眠状态唤醒,NSS下降沿到SCK上升沿的时间,数据手册表明最短时间为100us。
3、芯片离开sleep模式的方法
可以通过NSS的下降沿使得芯片从sleep模式唤醒。下降沿发生后,芯片内部的稳压器都将打开。芯片开始初始化,然后具备接收第1个SPI命令的能力。这意味着NSS下降沿到SCK上升沿之间的延时,需考虑唤醒序列和芯片的初始化。在睡眠模式和初始化阶段,BUSY引脚为高电平,以表明芯片不能够接收1个新的命令。一旦芯片进入了STDBY_RC模式,BUSY引脚将变低,此时主机可以发送命令。整个过程同样适用于上电启动和硬复位。
4、BUSY时序图
此情况,可立即发送命令,命令发送后,经Tsw时间,BUSY为高,再为低时,表示处理完毕。Tsw时间数据手册里标明为600ns,程序一般情况可忽略。
此情况,需等BUSY为低后,发送命令,后续处理和上图一样。
二、程序
1、定义SX1268类,使其从SPI继承而来。
class CSX1268:public CSpi
{
public:
CSX1268(void);
};
2、初始化CSX1268时,传递CPOL和CPHA为0。
CSX1268::CSX1268(void):CSpi(0, 0) {}
3、给出SPI写命令函数,共传递3个参数,第1个为命令类型,第2个为写入的buffer,第3个为buffer的大小。程序开始时,等待芯片准备好,然后将NSS置低,然后写入命令号,再写入后续buffer的内容,追后将NSS置高。整个命令发送完毕后,判断命令是否为设置为睡眠模式,如果不是,则等待BUSY引脚变为高电平。
void CSX1268::SX126xWriteCommand(RadioCommands_t command, uint8_t *buffer, uint16_t size)
{
SX126xCheckDeviceReady( );
this->Select();
this->WriteByte((uint8_t)command);
for(uint16_t i = 0; i < size; i++)
{
this->WriteByte(buffer[i]);
}
this->Deselect();
if( command != RADIO_SET_SLEEP )
{
SX126xWaitOnBusy( );
}
}
4、给出SPI读命令函数,同样传递3个参数,第1个为命令类型,第2个为写入的buffer,第3个为buffer的大小,其与写命令结构基本相同,关键在于发送完命令类型后,空读了一下,这与SX1268的命令读命令的序列有关,可参看下图,SX1268所有的读命令,命令类型后,都是status字节,有效数据从第2个起始。
void CSX1268::SX126xReadCommand(RadioCommands_t command, uint8_t *buffer, uint16_t size)
{
SX126xCheckDeviceReady( );
this->Select();
this->WriteByte((uint8_t)command);
this->ReadByte();
for(uint16_t i = 0; i < size; i++)
{
buffer[i] = this->ReadByte();
}
this->Deselect();
SX126xWaitOnBusy( );
}
5、SX126xWaitOnBusy函数比较简单,只是判断BUSY引脚变为低电平后,命令处理结束。在这里需要注意的是,NSS调高后,须经Tsw的时间,BUSY才为高,但Tsw的时间为600ns极短,所以我们可以直接调用SX126xWaitOnBusy函数。
void CSX1268::SX126xWaitOnBusy(void)
{
while (this->Busy.Check() == high);
}
到此,还有SX126xCheckDeviceReady函数没有完成,处理时,不仅要考虑BUSY引脚,还需考虑模式转换,本文前面已经提到可以使用NSS引脚唤醒SX1268,所以SX126xCheckDeviceReady函数不能仅处理BUSY引脚,其具体的实现方法,我们在下一篇日志中介绍。
上一篇:STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
下一篇:STM32开发笔记83: SX1268驱动程序设计(芯片复位)
设计资源 培训 开发板 精华推荐
- NCV8130BMX080TCGEVB:NCV8130BMX080TCG 偏置轨 LDO 稳压器演示板
- LF33CPT-TR 3.3V低压灯泡典型应用
- 使用 ON Semiconductor 的 ADP3156 的参考设计
- STM32F303VE MCU的评估板
- AM3GW-4805SZ 5V 3 瓦 DC-DC 转换器的典型应用
- LT6656ACDC-2.5、2.5V 微控制器电压基准和稳压器的典型应用
- MIC2206 的典型应用:具有 LOWQ 模式和电压调节功能的 2MHz PWM 同步降压稳压器
- EEPROM
- ADR423 超精密、低噪声、3.00 Vout XFET 电压基准的典型应用
- 2019电赛C题-电路负载及故障检测装置-设计报告(国二,东南大学)