通常,SD卡有两种总线模式,即SD总线模式和SPI总线模式。其中SD总线模式采用四条数据线并行传输数据,数据传输速率高,但是传输协议复杂,只有少数单片机才提供有此接口,而用软件方法模拟SD总线又比较繁琐,会降低SD卡的数据传输速率;而SPI总线模式只有一条数据传输线。传输协议简单,易于实现,虽然数据传输速率较低,但绝大多数中高档单片机都提供有SPI总线,同时由于其易于用软件方法来模拟。因此,本设计采用SPI总线模式。
SPI总线技术是MOTOROIA公司推出的一种同步串行总线接口,是目前单片机应用系统中最常用的几种串行扩展接口之一。 SPI总线主要通过三根线进行数据传输,包括同步时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输人数据线MOSI。另外,它还有一条低电平有效的从机片选线CS,片选信号以及同步时钟脉冲由主机提供。SPI总线模式的数据是以字节为单位进行传输的,主机与SD卡的各种通信都由主机控制。
软件设计
SD卡的初始化
SD卡从上电到对SD卡进行正确的读写 *** 作,往往都需要一个上电初始化的过程。SD卡上电后,主机必须先向SD卡发送74个时钟周期,以完成SD卡的上电过程。通常SD卡上电后会自动进入SD总线模式,并在SD总线模式下向SD卡发送复位命令(CMD0)。
SD卡的读写
SD卡的数据传输主要通过块读写来实现。块长度默认为512 KB。当RAM中已存放由模数转换模块传来的512 KB数据时,单片机便向SD卡写入此块数据。块读取时,可发送命令CMDl7,接收到的应答信号为0x00。这样就可以直接接收数据了,接收到的数据的第1个字节为数据令牌0xfe,后面的为接收到的数据,当输出口变为高电平时。表明读取 *** 作完成。
装数据读出以后,通过单片机处理,把结果在液晶上显示。
你想把51单片机运行的程序放在SD卡里,然后让51单片机读取并执行?很难!!!除非你的单片机带有bootloader,能从SD卡里读出程序并烧写到单片机的ROM里,再跳转到PC=0x0000开始执行这个程序。如果你的程序里包含了很多数据(不是运行的代码),比如显示一副图片。那就把数据分离出来放在SD卡里,那程序运行的时候就从SD里读出来做显示或怎么样。比如让LCD显示汉字而需要的汉字库HZK16有260KB,51单片机的64K是绝对装不下的,所以放在SD卡或者AT45DB161里,单片机的程序只需要计算出汉字的偏移量,然后从SD卡或AT45DB161的对应的地址里读出数据送到LCD上就可以了。
你好ram不足是51的一大缺陷。不知你用的什么厂家的51,AT,STC?
如果是老AT的51需要通过P0,P2外扩RAM,占用io多也很不经济
所以建议选用STC的stc12c5a60s2这个型号,集成1KB的外部RAM,60k的FLASH ROM. 淘宝7元左右。比较经济。
当然这所谓的1KB的RAM虽然集成在单片机片内,但它本质还是外部RAM.所以在c中定义它需加xdata来声明。
比如你定义读SD卡的一个512b的扇区缓冲如下:
unsigned char xdata buffer[512]这样干就行
然后把常用的变量定义在片内那256B中就可以。
是,stc,只可以串口下载,建议不要用at了,搞sd这样的东东还是用ram多一些的单片机,如avr或stc,at89s52速度慢,资源少,做简单的控制还可以。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)