DSP2812读写SST39VF800A之C++程序源码
/*-----------------------------------------------------<br /> DSP2812读写SST39VF800A之C++程序源码<br />本演示程序在Study-2812增强版上通过运行测试<br /><br />菜农HotPower@126.com 2008.5.5 于西安大雁塔菜地<br />------------------------------------------------------*/<br />#include "flash.h"<br /><br />FlashObj::FlashObj(void)<br />{<br /> Init(); <br /> Test();<br />}<br /><br />void FlashObj::Init(void)<br />{<br /> Active = false;<br /> Busy = false;<br /> MakerId = 0;<br /> DeviceId = 0;<br /> FlashReset();<br /> ReadId();<br /> Test();<br />}<br /><br />void FlashObj::FlashReset(void)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0xf0;<br /> Wait(FLASH);<br /> Busy = false;<br />}<br /><br />void FlashObj::ReadId(void)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x90;<br /> Wait(FLASH);<br /> MakerId = FLASH & 0xff;<br /> DeviceId = FLASH & 0xff;<br />//SST39VF800A MakerId=0xBF DeviceId=0x81 <br /> Active = (MakerId == 0xBF) && (DeviceId == 0x81);<br /> FlashReset();<br /> Busy = false;<br />}<br /><br />void FlashObj::ChipErase(void)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x80;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x10;<br /> Wait(FLASH);<br /> Busy = false;<br />}<br /><br />void FlashObj::SectorErase(unsigned int SectorNum)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x80;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x30;<br /> Wait(FLASH);<br /> Busy = false;<br />}<br /><br />void FlashObj::BlockErase(unsigned int BlockNum)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x80;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0x50;<br /> Wait(FLASH);<br /> Busy = false;<br />}<br /><br />void FlashObj::Write(unsigned int & address, unsigned int val)<br />{<br /> Busy = true;<br /> FLASH = 0xaa; <br /> FLASH = 0x55; <br /> FLASH = 0xa0;<br /> address = val;<br /> Wait(address);<br /> Busy = false;<br />}<br /><br />void FlashObj::Wait(unsigned int & address)<br />{<br />unsigned int temp, val;<br /> Busy = true;<br /> do <br /> {<br /> _delay_loop_(1);<br /> val = address;<br /> _delay_loop_(1);<br /> temp = address;<br /> }<br /> while(((val ^ temp) & BIT6) != 0);<br /> Busy = false;<br />}<br /><br />void FlashObj::Test(void) <br />{<br /> Busy = true;<br /> if (Active)//SST39VF800A测试正常 <br /> {<br /> FlashReset();<br /> ChipErase(); <br /> FlashReset();<br /> Write(FLASH, 0x1234);<br /> Write(FLASH, 0x1234);<br /> Write(FLASH, 0xabcd);<br /> FlashReset();<br /> SectorErase(0);<br /> FlashReset();<br /> Write(FLASH, 0x8888);<br /> FlashReset();<br /> BlockErase(0);<br /> Write(FLASH, 0x6666);<br /> FlashReset();<br /> }<br /> Busy = false;<br />}<br /><br />下图是在SST39VF800A上实现的"FLASH二次写入"图例https://bbs.21ic.com/upfiles/img/20076/2007620232653915.gif点击下载Study-2812增强版上Verilog源码
https://bbs.21ic.com/upfiles/img/20076/2007620234958695.gif<br /> 相关链接:<a href='http://blog.**/hotpower/112664/message.aspx'>http://blog.**/hotpower/112664/message.aspx</a>具有很好的演示效果,赞一个
这个是楼主
页:
[1]