搜索
bottom↓
回复: 25

51单片机模拟SPI总线读写EEPROM

[复制链接]

出0入0汤圆

发表于 2011-4-3 11:11:43 | 显示全部楼层 |阅读模式
最近在学习SPI总线,经过查看一些资料和自己摸索,对SPI有了一些理解,看了国内好多资料都是千篇一律的说在同步时钟的上升沿(或下跳沿)数据输入,在同步时钟的下跳沿(或上升沿)数据输出,按照这种方说法,时序图很难看懂.后来找了一份英文资料,里边说清楚了,我的理解是:以相位=0,极性=0这种工作模式,应该是在时钟上升沿从机的SPI的输入线上的数据读入到从机内部的移位寄存器,主机的SPI的输入线上的数据读入到主机内部的移位寄存器;在下跳沿,从机的SPI的内部的移位寄存器的最高位移出到输出线上,主机的SPI内部的移位寄存器的最高位移出到输出线上,经过8个脉冲,一个字节就可以传送完毕.
    下面用51单片机模拟SPI对EEPROM进行读写,在PROTEUS下仿真实现,源程序有详细的说明.
源程序ourdev_627871R80ZIF.rar(文件大小:192K) (原文件名:EEPROM_m95010.rar)

仿真图片 (原文件名:1.JPG)

出0入0汤圆

发表于 2011-4-3 11:40:27 | 显示全部楼层
怎么没人顶呢

出0入0汤圆

 楼主| 发表于 2011-4-3 21:38:05 | 显示全部楼层
自己顶

出0入0汤圆

发表于 2011-4-3 21:59:52 | 显示全部楼层
cool!
支持楼主原创,多谢楼主分享!!!

出0入0汤圆

发表于 2011-4-3 22:05:55 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2011-4-4 07:11:49 | 显示全部楼层
"我的理解是:以相位=0,极性=0这种工作模式,应该是在时钟上升沿从机的SPI的输入线上的数据读入到从机内部的移位寄存器,主机的SPI的输入线上的数据读入到主机内部的移位寄存器;在下跳沿,从机的SPI的内部的移位寄存器的最高位移出到输出线上,主机的SPI内部的移位寄存器的最高位移出到输出线上,经过8个脉冲,一个字节就可以传送完毕. "

for spi mode 0,0, the bits on MOSI (master-out and slave-in) are strobed to the slave on the rising edge of SCK; the data from MISO (master-in and slave-out) is strobed into th master on the falling edge of SCK.

出0入0汤圆

发表于 2011-4-4 08:10:46 | 显示全部楼层
here is a short section of my code:

====================eeprom .c file==================
void _25lc_write(unsigned short address, unsigned char data_t) {                //write a byte to _25LC

        _25LC_SEND_WREN();                                        //send the wren

        _25lc_select(_25LC_CS);                                //select the chip
        spi_write(_25LC_CMD_WRITE);                        //send the "write" instruction
#ifdef _25LC_16BIT
        spi_write(_25LC_MSB(address));                //send the msb
#endif
        spi_write(_25LC_LSB(address));                //send the lsb
        spi_write(data_t);                                        //send the data
        _25lc_deselect(_25LC_CS);                        //deselect the chip, to start the write process

        while (_25LC_WIP()) continue;                //wait for the write to finish

}
===================================

that particular section writes a byte to a given address in a spi eeprom. notice the query at end of it that waits for the write operation to complete. it is equivalent to the acknowledge pulling on a i2c eeprom.

all the user needs to do is to include the .c and .h files in his project, change the hardware configuration for the spi/cs pins and recompile.

出0入0汤圆

 楼主| 发表于 2011-4-4 22:40:24 | 显示全部楼层
楼上的英文不错,学习了

出0入0汤圆

 楼主| 发表于 2011-4-6 09:47:54 | 显示全部楼层
发一个SPI相位,极性,时钟时序图,给初学者参考,图中,CPOL表示极性,CPOL=0,表示同步时钟空闲时为低电平,CPOL=1,表示同步时钟空闲时为高电平;CPHA为相位,CPHA=0,表示数据与时钟同相位,CPHA=1,表示数据滞后时钟180度相位.

SPI有4种工作模式,如下图:


SPI 工作模式 (原文件名:SPI MODES.JPG)




SPI时序 (原文件名:SPI时序图.JPG)

出0入0汤圆

发表于 2011-4-6 10:03:15 | 显示全部楼层
灌注。

出0入0汤圆

发表于 2011-4-6 20:56:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-6 21:37:53 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2011-4-20 16:10:15 | 显示全部楼层
本人来迟了,但也顶一哈, 谢谢分享

出0入0汤圆

发表于 2011-5-8 17:04:09 | 显示全部楼层
谢谢哈,楼主能说一下两个单片机间的并口通信不嘛

出0入0汤圆

 楼主| 发表于 2011-5-8 21:06:50 | 显示全部楼层
单片机之间一般是通过串口进行通信的,通过并口进行通信好像还没见过!

出0入0汤圆

发表于 2011-5-11 08:37:27 | 显示全部楼层
支持

出0入0汤圆

发表于 2011-5-25 23:19:42 | 显示全部楼层
顶一个!

出0入0汤圆

发表于 2011-6-23 19:42:00 | 显示全部楼层
正在学习SPI通信呢,感悟中。

出0入0汤圆

发表于 2011-6-23 20:42:27 | 显示全部楼层
记号

出0入0汤圆

发表于 2012-7-19 15:58:40 | 显示全部楼层
mark            

出0入0汤圆

发表于 2014-1-4 16:23:58 | 显示全部楼层
很好,下来研究研究。

出0入0汤圆

发表于 2015-3-14 19:40:05 | 显示全部楼层
spi调试器是干嘛用的?有什么用处

出0入0汤圆

发表于 2015-3-14 20:04:27 | 显示全部楼层
好吧。我过不少,就是没有自己写过

出0入0汤圆

发表于 2015-7-10 17:01:34 | 显示全部楼层
没看懂!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 08:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表