AVR单片机SPI口读写AT45DB161D接口程序设计.doc_第1页
AVR单片机SPI口读写AT45DB161D接口程序设计.doc_第2页
AVR单片机SPI口读写AT45DB161D接口程序设计.doc_第3页
AVR单片机SPI口读写AT45DB161D接口程序设计.doc_第4页
AVR单片机SPI口读写AT45DB161D接口程序设计.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR单片机SPI口读写AT45DB161D接口程序设计 本程序为AVR单片机SPI口访问AT45DB161D提供一组接口函数,通过这一组接口函数可非常容易的完成对AT45DB161D的读写操作AT45DB161D按页组织和操作(读写擦等等)内部的FLASH存储器,每页为528字节(特殊用途时可通过命令配置成512字节),其内部共集成4096页,即4096*528=2162688字节。本程序将为您提供读写这2162688字节存储区的线性操作方法。使用这些函数,用户可不必考虑AT45DB161D内部的存储器组织结构,如同读写一个文件一样进行读写操作。 void df_init(void);这是SPI口初始化函数,它必须在所有这些接口函数调用之前得到调用void df_read_open(uint32_t addr);读操作初始化函数,addr指定接下来的读函数的开始读取位置。程序内部维护一个当前读取计数器,用户每读一字节该计数器加一void df_write_open(uint32_t addr);写操作初始化函数,addr指定接下来的写函数的开始写入位置。程序内部维护一个当前写入计数器,用户每写入一个字节该计数器加一uint8_t df_getc(void);此函数从当前读位置读取一字节后返回,内部的读计数器加一void df_putc(uint8_t c);此函数向当前写位置写入一字节的数据,并使内部写计数器加一void df_read(uint8_t *buf,uint8_t size);此函数从当前读位置读取size个字节的数据到缓冲区buf,并使内部读计数器加sizevoid df_write(uint8_t *buf,uint8_t size);此函数从缓冲区buf向当前写位置写入size字节的数据,并使内部写计数器加sizevoid df_read_seek(uint32_t addr);调整当前读计数器,调用此函数前必须已调用df_read_openvoid df_write_seek(uint32_t addr);调整当前写计数器,调用此函数前必须已调用df_write_openvoid df_read_close(void);关闭读操作void df_write_close(void);关闭写操作,所有的写入操作完成后必须调用此函来结束写操作,以便数据能够完整的保存到AT45DB161D主存储器当中源程序:/*AVR单片机SPI口读写at45db161d接口程序文件名:dataflash.c编译:WinAVR-20070525芯艺设计室 2004-2007 版权所有 转载请保留本注释在内的全部内容WEB: Email: */i nclude i nclude at45db161d.hi nclude dataflash.h/*下面是全局变量定义*/static uint16_t g_CurReadPage;/当前读的页地址static uint16_t g_CurReadByte;/当前读的字节(页中地址)static uint16_t g_CurWritePage;/当前写的页地址static uint16_t g_CurWriteByte;/当前写的字节地址(页中地址)/*下面是内部调用的接口函数*/从SPI口输出一字节数据static uint8_t spi_write(uint8_t data)SPDR = data;while(!(SPSR & _BV(SPIF);return SPDR;/检测并等待器件忙状态,8引脚封闭器件没有 RDY/BUSY引脚 为些通过读状态寄存器来检测忙状态static void df_wait_busy(void)SELECT_CHIP;spi_write(STATUS_REGISTER);while(1)if(spi_write(0) & 0x80) /读取的最高位0时器件忙break;UNSELECT_CHIP;/读主存储器指定页到读缓冲区(BUFFER1)static void load_page_to_buffer(uint16_t page,uint8_t buffer)SELECT_CHIP;if(buffer = DF_READ_BUFFER) spi_write(MM_PAGE_TO_B1_XFER); elsespi_write(MM_PAGE_TO_B2_XFER);spi_write(uint8_t)(page 6);spi_write(uint8_t)(page 6);spi_write(uint8_t)(page8);spi_write(uint8_t)addr); for(i=0;i8);spi_write(uint8_t)addr); for(i=0;i DF_PAGE_SIZE) /如果当前页未读取数据不够size字节/读当前页剩余数据temp=DF_PAGE_SIZE - g_CurReadByte;read_buffer(g_CurReadByte,buf,temp);/装入下一页load_page_to_buffer(+g_CurReadPage,DF_READ_BUFFER);/从下一页读剩余数据g_CurReadByte=size-temp;read_buffer(0,buf+temp,g_CurReadByte);else /如果当前页数据有size字节read_buffer(g_CurReadByte,buf,size);g_CurReadByte+=size;/如果当前页数据已全部读完if(g_CurReadByte=DF_PAGE_SIZE)load_page_to_buffer(+g_CurReadPage,DF_READ_BUFFER);g_CurReadByte=0; void df_write(uint8_t *buf,uint8_t size)uint8_t temp;if(g_CurWriteByte + size) DF_PAGE_SIZE) /如果当前页未写空间不够size字节/写当前页剩余空间的数据temp=DF_PAGE_SIZE - g_CurWriteByte;write_buffer(g_CurWriteByte,buf,temp);/保存当前页write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);g_CurWritePage+;load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER);/写入到下一页对应缓冲区g_CurWriteByte=size-temp;write_buffer(0,buf+temp,g_CurWriteByte);elsewrite_buffer(g_CurWriteByte,buf,size);g_CurWriteByte+=size;/缓冲已满,写入到主存储区if(g_CurWriteByte=DF_PAGE_SIZE)g_CurWriteByte=0;write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER);g_CurWritePage+; load_page_to_buffer(g_CurWritePage,DF_WRITE_BUFFER); /调整写指针void df_read_seek(uint32_t addr)df_read_close();df_read_open(addr);/调整读指针void df_write_seek(uint32_t addr)df_write_close();df_write_open(addr); void df_read_close(void)/此处不做任何处理void df_write_close(void)write_page_from_buffer(g_CurWritePage,DF_WRITE_BUFFER); /缓冲区内容写入到主存储器dataflash.h文件:#ifndef DATAFLASH_H#define DATAFLASH_H/硬件引脚定义#define FLASH_MOSI PB3#define FLASH_MISO PB4#define FLASH_SCK PB5#define

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论