制造商机器ID的读取
发送90H命令,发送00h的地址,接收即可。
代码如下所示。
voidspiflashreadid(int*pmid,int *pDID ) SPIflash_set_cs(0); 检查/*SPIflash*/spisendbyte(0x90 ); spiflashsendaddr(0; *pMID=SPIRecvByte (; *pDID=SPIRecvByte (; SPIflash_set_cs(1); }两个状态寄存器
在状态寄存器中,可以询问芯片此时是否繁忙,是否解除各种保护操作等。
通过写入状态寄存器BUSY位了解芯片是否忙*/staticvoidspiflashwaitwhenbusy (void ) { while } spiflashreadstatusreg1)1); }/*启用操作*/staticvoidspiflashwriteenable (intenable ) if ) enable ) SPIflash_set_cs )0); spisendbyte(0x06; SPIflash_set_cs(1); }else{SPIflash_set_cs(0; spisendbyte(0x04; SPIflash_set_cs(1); }/*写入状态寄存器*/staticvoidspiflashwritestatusreg (unsignedcharreg 1,unsigned char reg2) spiflashwriteenable(1); SPIflash_set_cs(0; spisendbyte(0x01; spisendbyte(reg1; spisendbyte(reg2; SPIflash_set_cs(1); SPIFlashWaitWhenBusy (; }擦除操作/* erase 4k */voidspiflasherasesector (unsignedintaddr ) spiflashwriteenable); SPIflash_set_cs(0; spisendbyte(0x20; spiflashsendaddr(addr; SPIflash_set_cs(1); SPIFlashWaitWhenBusy (; }读写数据/* program */voidspiflashprogram (unsignedintaddr,unsigned char *buf,int len ) { int i; spiflashwriteenable(1); SPIflash_set_cs(0; spisendbyte(0x02; spiflashsendaddr(addr; for(I=0; i len; I ) spisendbyte(buf[I]; SPIflash_set_cs(1); SPIFlashWaitWhenBusy (; }/* read */voidspiflashread (unsignedintaddr,unsigned char *buf,int len ) { int i; SPIflash_set_cs(0; spisendbyte(0x03; spiflashsendaddr(addr; for(I=0; i len; I ) buf[i]=SPIRecvByte (; SPIflash_set_cs(1); }芯片操作指示单
下一篇文章将导出Linux上的Flash驱动程序。
转载于:https://www.cn blogs.com/gy forever 1004/p/8536919.html