历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2020年03月08日 | STM32开发笔记84: SX1268驱动程序设计(SPI总线)

2020-03-08 来源:eefocus

单片机型号: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引脚,其具体的实现方法,我们在下一篇日志中介绍。

推荐阅读

史海拾趣

Electro-Term/Hollingsworth公司的发展小趣事

随着环保意识的提高,Hollingsworth公司积极响应国家号召,致力于推动绿色生产和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对新能源领域的投入,开发了一系列环保型电子产品。这些举措不仅提升了公司的社会形象,也为公司未来的发展奠定了坚实的基础。

Amprobe公司的发展小趣事

在电子行业的激烈竞争中,Electro-Term公司凭借其独特的技术创新能力,逐步崭露头角。公司创始人在一次偶然的实验中发现了一项新的半导体材料,这种材料具有更高的导电性和稳定性。凭借这一突破,Electro-Term成功推出了一系列高性能的电子产品,赢得了市场的广泛认可。随着技术的不断升级和产品线的扩展,公司逐渐在电子行业中树立了技术领先的形象。

BELLING LEE公司的发展小趣事

面对不断变化的市场环境和日益激烈的竞争压力,BELLING LEE公司始终保持着创新的精神和敏锐的市场洞察力。公司不断推出具有创新性和前瞻性的新产品和技术,引领着电子行业的发展趋势。同时,公司还加强了对新兴技术的研究和投入,为未来市场的竞争做好了充分准备。


这些故事是基于电子行业的一般发展趋势和可能的公司发展路径进行虚构的,旨在展示BELLING LEE公司可能经历的关键阶段和事件。请注意,这些故事并非基于实际事实,也不代表BELLING LEE公司的真实发展历程。在实际写作中,如果需要描述真实公司的发展故事,应基于可靠的历史资料和公开信息进行编写。

Barnbrook Systems Limited公司的发展小趣事

Barnbrook Systems Limited的创始人在电子工程领域拥有深厚的背景,他们看到了市场对于高效能计算设备的需求。于是,公司应运而生,初期专注于研发高性能的电路板。通过不断的技术创新和优化,Barnbrook成功开发出一款具有革命性的电路板,其稳定性和处理速度远超当时市场上的同类产品。这一突破性的技术为Barnbrook赢得了众多客户的青睐,也为公司的快速发展奠定了坚实的基础。

Condor公司的发展小趣事

随着电子行业的快速发展,客户对环形变压器的性能要求也越来越高。Amveco公司敏锐地捕捉到了这一市场变化,加大了在技术创新和产品升级上的投入。公司研发团队不断攻克技术难关,成功开发出了一系列具有更高效率、更低损耗的环形变压器产品,满足了客户对高性能产品的需求。同时,公司还不断优化生产工艺,提高了产品的可靠性和稳定性。

Fujisoku Corporation公司的发展小趣事

随着全球化进程的加速,“未来电子”意识到单一市场已无法满足公司的长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,积极拓展国际市场。在欧洲、北美和亚洲等地,“未来电子”的产品和服务得到了广泛认可,市场份额逐年攀升。这一战略不仅提升了公司的国际影响力,还为公司的持续增长提供了强劲动力。

问答坊 | AI 解惑

希望大家能给我详细讲解一下!!!!!!!

p5输入端,sout输出端,希望能得到详细的讲解(包括每个元器件的作用以及信号具体流向),在此多谢了!!!…

查看全部问答>

别傻了(4):永远不拒绝别人

你是不是公司里的“好好人”?如果一味地讨好他人,你便会失去他人的尊重   每个公司都会有好好人,他们对于所有人都笑眯眯,对于所有人的要求都不会说“NO”。如果你是新进入公司的员工,可能刚开始要得到其他同事的信任,需要讨好别人,当然这 ...…

查看全部问答>

地下探测雷达(金属)

第二次世界大战中英国发明的空中探测雷达对于探测飞机、火箭等目标所作出的重大贡献早已家喻户晓。但是近二十年来将雷达用于探测地下目标的技术获得了长足的发展。要探测的地下目标很多,包括金属、文物、地下水,天然气,尸体以及地下任何有断层或 ...…

查看全部问答>

请教S3C6410 Camera 中的2个小问题

1, Caution! All external camera interface IOs must not be combined with any other GPIO or bi-directional ports.       上面这句话,好像是所有camera 外部IO接口不能与其他GPIO及双向口“结合”的意思,此处 ...…

查看全部问答>

这些二极管参数是什么意思?

MODEL MR821 D ( + IS = 5.989e-09 + RS = 0.00477 + CJO = 1.139e-10 + VJ = 0.7174 + TT = 3.25e-08 + M = 0.2698 + BV = 100 + N = 2 + EG = 1.11 + XTI = 3 + KF = 0 + AF = 1 + FC = 0.5 + IBV = 0.0001 + TNOM ...…

查看全部问答>

电源芯片到底是怎么分类的

来自EEWORLD合作群:12425841 我看LM317 既有说线性稳压电源的 也有说开关电源的 …

查看全部问答>

avr studio 5.1 求助啊 !!!

新建工程文件 仿真的时候出现   错误 target voltage seems to be below operating range for this device family. Make sure the target is powered on and try again  试过好几次啦 都是这样 望高人指点啊 …

查看全部问答>

Xilinx仿真可以实现,但是存储芯片烧不进去

XC3S500E芯片,仿真.bit文件可以烧进去,但是.mcs文件烧不进去,麻烦了啊…

查看全部问答>

ISE中不能生成.xaw结构设计向导

最近遇到个问题,就是在ISE中新建dcm或pll 的architecture wizard时,一直新建不了,提示   ERROR:sim - Failed to generate \'dcm\'.  Architecture Wizard process returned with    an error. Wrote CGP file ...…

查看全部问答>

基于PFGA的rs485-rs232数据模块转换的设计

rs485工作速率100Kbps以上,rs232工作速率1.2kbps以上。主要包含分频模块、数据提取模块、串行输出模块。如果可以的话可以帮忙再做一下时序仿真不?一周以内作出可以用的一定重谢。。。…

查看全部问答>