历史上的今天
返回首页

历史上的今天

今天是:2025年02月27日(星期四)

正在发生

2018年02月27日 | 单片机数据通信:模拟SPI数据传输

2018-02-27 来源:eefocus

    本文是以时钟芯片DS1302为例子来分析时序图并写出代码。DS1302是采用SPI三线接口与单片机进行同步通信。重点分析单字节读时序,单字节写时序,寄存器读时序,寄存器写时序,并完成4个函数。完整代码以及仿真图下载地址:http://pan.baidu.com/s/1ntM5Kgh

1.gif?imageView2/2/w/550

 

    上图为寄存器读时序,为什么先贴出这个图呢,因为读寄存器包含了单字节的写以及单字节的读。从图上可以看出,读DS1302的寄存器是先写入一个地址,然后再去读一个字节。那么就可以根据这个图来完成单字节的读写时序分析以及代码的编写。

    单字节写时序

    图1可以告诉我们,在时钟的上升沿是写入数据,是从低位开始写入。还有一个需要注意的地方是写字节和读字节连接处,从图中可以看出,当最后一个位写入后,接下来的一个下降沿就开始读数据了,在代码编写时要注意这一点,不然读数据就会出错。先看看下面的代码:

    void dsWriteByte(u8 dat) //写入字节

    {

    u8 i;

    for(i = 0;i < 8;i++)

    {

    if(dat & 0x01) ds1302IOStatu(1);

    else ds1302IOStatu(0); //低位先写入,根据要写入的数据确定IO的电平

    ds1302CLKStatu(0);

    ds1302CLKStatu(1); //产生上升沿写入数据

    dat >>= 1; //移位,准备下一位

    }

    } //写一个字节后,此时时钟脚是高电平

    单字节读时序

    同样是根据图1可以看出是下降沿读取数据,低位先被读取。根据这个信息编写如下代码:

    u8 dsReadByte() //读一个字节

    {

    u8 i,tmp = 0;

    for(i = 0;i < 8;i++)

    {

    ds1302CLKStatu(1);

    tmp >>= 1; //移位

    ds1302CLKStatu(0); //产生下降沿

    if(ds1302_IO) tmp |= 0x80; //读取一位数据

    }

    return tmp; //返回数据

    }

    寄存器读时序

    上面完成了单字节读写函数,根据图1来完成读寄存器的代码。这时就的控制RST脚了。由时序图可以看出,写一个字节和读一个字节时,RST脚都是高电平状态,那么根据这些信息就完成如下代码:

    u8 dsReadReg(u8 addr) //读寄存器

    {

    u8 tmp;

    ds1302RSTStatu(1); //拉高RST脚之后再完成写字节和读字节

    dsWriteByte(addr); //写地址

    tmp = dsReadByte(); //读字节

    ds1302RSTStatu(0); //最后拉低RST脚,和图1的时序相同

    tmp = (tmp >> 4) * 10 + (tmp & 0x0f); //这个是数据类型转换

    return tmp; //返回数据

    }

    寄存器写时序

2.gif?imageView2/2/w/550

    上图为寄存器写时序,拉高RST脚后,写入地址再写入数据最后拉低RST脚,这样就完成了写寄存器操作。完成以下的代码:

    void dsWriteReg(u8 addr,u8 dat) //写寄存器

    {

    ds1302RSTStatu(1); //拉高RST脚

    dsWriteByte(addr); //写入地址

    dsWriteByte(dat); //写入数据

    ds1302RSTStatu(0); //拉低RST脚

    }

    四个时序到此就分析结束了,再回头看看编写的代码都是依据时序得来的,学会分析时序图就可以写出属于自己的代码了,同样可以依据时序图来检查代码的错误。了解了这部分的时序分析,推荐大家利用模拟SPI的通信方式编写xpt2046的读写函数。


推荐阅读

史海拾趣

E-tec Interconnect Ltd公司的发展小趣事

在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。

长江连接器(CJT)公司的发展小趣事

长江连接器(CJT)公司自创立之初,就致力于电子连接器的研发、生产和销售。公司凭借对连接器技术的深入研究和理解,不断积累技术经验,逐渐在连接器领域建立了自己的技术壁垒。在初创阶段,长江连接器就注重产品质量和技术创新,通过引进先进的生产设备和技术人才,不断提高产品的性能和可靠性。

DECON公司的发展小趣事

DECON公司成立于电子行业的蓬勃发展时期,初创期便专注于研发和生产高质量的电子连接器产品。通过对市场的深入调研和技术创新,公司成功定位自己在高端连接器市场的位置,并凭借其出色的产品质量和稳定的性能,逐步在市场中树立了良好的口碑。

Franz Binder GmbH & Co公司的发展小趣事

品质是企业的生命线,DECON公司深知这一点。因此,公司建立了完善的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格的质量监控。公司引进了先进的生产设备和技术,优化了生产流程,提高了生产效率和产品质量。同时,公司还建立了完善的售后服务体系,为客户提供及时、高效的技术支持和解决方案。

Austek Microsystems公司的发展小趣事

在追求经济效益的同时,Austek Microsystems也积极履行社会责任。公司严格遵守环保法规,采用环保材料和生产工艺,减少对环境的影响。此外,Austek Microsystems还积极参与公益事业,为社区的发展和进步贡献自己的力量。

这五个故事展示了Austek Microsystems在电子行业中的发展历程和取得的成就。通过创新研发、建立合作伙伴关系、技术升级与产品迭代、市场拓展与品牌建设以及履行社会责任等方式,Austek Microsystems逐渐在市场中崭露头角,成为了电子行业中一颗璀璨的明星。

CUI Inc.公司的发展小趣事

CUI Inc.一直坚信,与客户的紧密合作是其成功的关键。因此,公司始终致力于与客户发展协作性伙伴关系。通过深入了解客户的需求和反馈,CUI不断优化其产品和服务,以满足客户的期望。这种以客户为中心的经营理念不仅赢得了客户的忠诚和支持,还为CUI带来了持续的业务增长和市场份额的扩大。

这些故事只是CUI Inc.在电子行业中发展起来的一部分可能情况。实际上,CUI的发展可能涉及更多的战略决策、市场变化和技术突破。如果需要更具体、详细的故事,建议查阅相关的行业报告、公司年报或新闻资讯。

问答坊 | AI 解惑

我收集到的D类音频功放资料

应求:D类音频功放的设计。 附件内容如下: [local]1[/local]D类音频功放芯片输出级电路的设计 用SG3525作调制器的D类音频功放…

查看全部问答>

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?…

查看全部问答>

【福州招聘】高级嵌入式软件工程师 嵌入式软件工程师 各一名

高级嵌入式软件工程师Sr. Embedded Software Engineer 岗位描述: 1、负责嵌入式软件和产品设计。 2、负责嵌入式软件开发。 任职要求: 1、通信、电子或计算机类相关专业,本科以上学历; 2、五年以上相关工作经验; 3、需要熟悉WINDOWS CE. ...…

查看全部问答>

高薪聘Windows Mobile 底层驱动开发工程师(深圳南山)

高薪聘Windows   Mobile  底层驱动开发工程师 公司网址:www.bitland.com.cn ,偶QQ549503575 ;E-mail:yangsq@bitland.com.cn   有兴趣的可以加我细聊           待 ...…

查看全部问答>

请问:如何在用C语言写的程序中加入CPL和EFLAGS这两个关键字

编译的时候总是说CPL和EFLAGS是undeclared identifier.是不是应该Link什么库? 谢谢!…

查看全部问答>

电赛‘一目了然’历年元器件清单对比(2003--2011)excel格式

历年元器件清单对比    对比看更清楚!!! [ 本帖最后由 GTao_12345 于 2011-8-25 17:08 编辑 ]…

查看全部问答>

STM8 入门神器 上传几张效果图

    SGSTM8-III  开发板使用STMS105S4芯片  含全套 的视频教程,需要的可以联系我         STM8 开发板的1602 液晶屏的效果图   、 12864 液晶的效果图   ADC结合数码管的效果图 ...…

查看全部问答>

AM335x 关于eeprom使用i2c1接口问题

在我的开发板上,eeprom使用的是i2c1接口,内核版本是linux3.2,问题如下 : [ 1.496795] omap_i2c omap_i2c.2: Arbitration lost [ 2.513793] omap_i2c omap_i2c.2: timeout waiting for bus ready root@am335x-evm:~# i2cdetect -r 2 WARNING! ...…

查看全部问答>