Flash.c
上传用户:xhjmsc
上传日期:2019-09-13
资源大小:389k
文件大小:9k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. //Flash model HY27UF081G2M
  2. #include "includeH.h"
  3. //***********************************************************************************
  4. /*
  5. void FlashPageCopy(void)
  6. {
  7.         unsigned char ucFlashSttsOverflowCnt=0;
  8.         COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
  9. COMMAND_LATCH_INTO();
  10. //ADDRESS
  11. ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  12. ADDRESS_LATCH_INTO();
  13. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  14. ADDRESS_LATCH_INTO();
  15. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  16. ADDRESS_LATCH_INTO();
  17. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  18. ADDRESS_LATCH_INTO();
  19. FLASH_CON_PORT_OUT &=~ ALE;
  20. COMMAND_VAL=0X35;
  21. COMMAND_LATCH_INTO();
  22. //ATcmdDelay();
  23. while((FLASH_CON_PORT_IN & RB)==0);
  24.   
  25.         COMMAND_VAL=0x85;
  26. COMMAND_LATCH_INTO();
  27. //ADDRESS
  28. ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  29. ADDRESS_LATCH_INTO();
  30. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  31. ADDRESS_LATCH_INTO();
  32. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  33. ADDRESS_LATCH_INTO();
  34. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  35. ADDRESS_LATCH_INTO();
  36. FLASH_CON_PORT_OUT &=~ ALE;
  37. COMMAND_VAL=cFlashWriteInitiateCmd; //10H INITIATES PROGRAM
  38. COMMAND_LATCH_INTO();
  39. READ_STATUS();
  40. ucFlashSttsOverflowCnt=0;
  41. if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  42. {
  43. ;
  44. }
  45. }
  46. */
  47. //***********************************************************************************
  48. void ZERO_ADDRESS(void)
  49. {
  50. COLUMN_ADDRESS_LOW=0X00;
  51. COLUMN_ADDRESS_HIGH=0X00;
  52. ROW_ADDRESS_LOW=0X00;
  53. ROW_ADDRESS_HIGH=0X00;
  54. }
  55. void ERASE_ONE_BLOCK(void)
  56. {
  57.                 unsigned int wGeneralCount = 0;
  58. //COMMAND
  59. Flash_Reset();
  60. COMMAND_VAL=0X60;
  61. COMMAND_LATCH_INTO();
  62. //ADDRESS
  63. /* ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  64. ADDRESS_LATCH_INTO();
  65. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  66. ADDRESS_LATCH_INTO();                 */ //a bug of Sep. 15
  67. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  68. ADDRESS_LATCH_INTO();
  69. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  70. ADDRESS_LATCH_INTO();
  71. FLASH_CON_PORT_OUT &=~ ALE;
  72. COMMAND_VAL=0XD0;
  73. COMMAND_LATCH_INTO();
  74. //delay1ms();
  75. READ_STATUS();
  76. while(wGeneralCount++<0xffff) //Jan. 18, 2007
  77. {if (FLASH_STATUS==0) break;}
  78. }
  79. //***********************************************************************************
  80. void PROGRAM_ONE_PAGE(unsigned char ucFlashWriteData)
  81. {
  82.     unsigned int wByteCount;
  83.     unsigned char ucFlashSttsOverflowCnt=0;
  84. //COMMAND
  85. COMMAND_VAL=cFlashWriteCmd;
  86. COMMAND_LATCH_INTO();
  87. //ADDRESS
  88. ADDRESS_VALUE=0;//COLUMN_ADDRESS_LOW; //#0X00
  89. ADDRESS_LATCH_INTO();
  90. ADDRESS_VALUE=0;//COLUMN_ADDRESS_HIGH; //#0X00
  91. ADDRESS_LATCH_INTO();
  92. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  93. ADDRESS_LATCH_INTO();
  94. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  95. ADDRESS_LATCH_INTO();
  96. FLASH_CON_PORT_OUT &=~ ALE;
  97. //CALL DELAY_100US
  98. //for(wGeneralCnt=0;wGeneralCnt<0xff;wGeneralCnt++); //delay
  99. DATA_PORT_OUT_INITIAL;
  100. for(wByteCount=0;wByteCount<2112;wByteCount++)
  101. {
  102. //FLASH_WRITE_DATA=0x55;
  103. //WRITE_ONE_DATA();
  104. FLASH_CON_PORT_OUT&=~WE;
  105.   DATA_PORT_OUT=ucFlashWriteData;
  106.   FLASH_CON_PORT_OUT |= WE;
  107. }
  108. COMMAND_VAL=cFlashWriteInitiateCmd; //10H INITIATES PROGRAM
  109. COMMAND_LATCH_INTO();
  110. READ_STATUS();
  111. ucFlashSttsOverflowCnt=0;
  112. if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  113. {
  114. ;// Dec. 02,2006
  115. //ERASE_ONE_BLOCK();
  116. //PROGRAM_ONE_PAGE();
  117. }
  118. }
  119. //***********************************************************************************
  120. //***********************************************************************************
  121. void PROGRAM_256_BYTE(void)
  122. {
  123.     unsigned int wGeneralCnt=0;
  124.     unsigned char ucFlashSttsOverflowCnt=0,ucRxIndex=0;
  125. //COMMAND
  126. COMMAND_VAL=0X80;
  127. COMMAND_LATCH_INTO();
  128. //ADDRESS
  129. ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  130. ADDRESS_LATCH_INTO();
  131. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  132. ADDRESS_LATCH_INTO();
  133. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  134. ADDRESS_LATCH_INTO();
  135. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  136. ADDRESS_LATCH_INTO();
  137. FLASH_CON_PORT_OUT &=~ ALE;
  138. //CALL DELAY_100US
  139. for(wGeneralCnt=0;wGeneralCnt<0xff;wGeneralCnt++);
  140. DATA_PORT_OUT_INITIAL;
  141. for(ucRxIndex=0;ucRxIndex<255;ucRxIndex++)
  142. {
  143. FLASH_CON_PORT_OUT&=~WE;
  144.   DATA_PORT_OUT=aucUartRxBuf[ucRxIndex];
  145.   FLASH_CON_PORT_OUT |= WE; //LATCH INTO ONE DATA
  146. }
  147. COMMAND_VAL=0X10; //10H INITIATES PROGRAM
  148. COMMAND_LATCH_INTO();
  149. READ_STATUS();
  150. ucFlashSttsOverflowCnt=0;
  151. if(FLASH_STATUS==1&&(ucFlashSttsOverflowCnt++)<2)
  152. {
  153. ;// Dec. 02,2006
  154. //ERASE_ONE_BLOCK();
  155. //PROGRAM_ONE_PAGE();
  156. }
  157. }
  158. //***********************************************************************************
  159. void READ_256_BYTE(void)
  160. {
  161.                 int wByteCnt=0;
  162. unsigned char ucRxCnt=0;
  163. //COMMAND
  164. Flash_Reset();
  165. COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
  166. COMMAND_LATCH_INTO();
  167. //ADDRESS
  168. ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  169. ADDRESS_LATCH_INTO();
  170. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  171. ADDRESS_LATCH_INTO();
  172. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  173. ADDRESS_LATCH_INTO();
  174. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  175. ADDRESS_LATCH_INTO();
  176. FLASH_CON_PORT_OUT &=~ ALE;
  177. COMMAND_VAL=0X30;
  178. COMMAND_LATCH_INTO();
  179. ATcmdDelay();
  180. while((FLASH_CON_PORT_IN & RB)==0);
  181. DATA_PORT_IN_INITIAL;
  182. for(wByteCnt=0,ucRxCnt=0;wByteCnt<256;wByteCnt++)
  183. {
  184.             FLASH_CON_PORT_OUT &=~ RE; //RE IS LOW,ENABLE READ DATA
  185.     aucUartRxBuf[ucRxCnt++]=DATA_PORT_IN;
  186.     FLASH_CON_PORT_OUT |= RE;
  187. }
  188. }
  189. //***********************************************************************************
  190. /***********************************************************************************
  191. void READ_ONE_PAGE(void)
  192. {
  193.                 int wByteCnt=0;
  194. unsigned char ucRxCnt=0;
  195. //COMMAND
  196. COMMAND_VAL=0x00; //#0X00 //00H READ1 0-527BYTE
  197. COMMAND_LATCH_INTO();
  198. //ADDRESS
  199. ADDRESS_VALUE=COLUMN_ADDRESS_LOW; //#0X00
  200. ADDRESS_LATCH_INTO();
  201. ADDRESS_VALUE=COLUMN_ADDRESS_HIGH; //#0X00
  202. ADDRESS_LATCH_INTO();
  203. ADDRESS_VALUE=ROW_ADDRESS_LOW; //#0X00
  204. ADDRESS_LATCH_INTO();
  205. ADDRESS_VALUE=ROW_ADDRESS_HIGH; //#0X00
  206. ADDRESS_LATCH_INTO();
  207. FLASH_CON_PORT_OUT &=~ ALE;
  208. COMMAND_VAL=0X30;
  209. COMMAND_LATCH_INTO();
  210. ATcmdDelay();
  211. while((FLASH_CON_PORT_IN & RB)==0);
  212. for(wByteCnt=0,ucRxCnt=0;wByteCnt<2048;wByteCnt++)
  213. {
  214.             READ_ONE_DATA();
  215.             aucUartRxBuf[ucRxCnt++]=FLASH_READ_DATA;
  216. }
  217. }
  218. ***********************************************************************************/
  219. //***********************************************************************************
  220. void READ_STATUS(void)
  221. {
  222. //CALL DELAY_50US
  223. while((FLASH_CON_PORT_IN & RB)==0); //FLASH_CON_PORT,RB,$ //CHECK BUSY
  224. COMMAND_VAL=0X70;
  225. COMMAND_LATCH_INTO();
  226. DATA_PORT_IN_INITIAL;
  227. READ_ONE_DATA(); //WHEN READY,READ STATUS
  228. FLASH_STATUS=FLASH_READ_DATA & 0x01; //0 OK 1 error
  229. //if((READ_DATA_VALUE&0x01)==0)
  230. // FLASH_STATUS=0; //0 OK 1 error
  231. }
  232. //***********************************************************************************/
  233. void FLASH_READ_ID(void)
  234. {
  235. COMMAND_VAL=0X90;
  236. COMMAND_LATCH_INTO();
  237. ADDRESS_VALUE=0X00;
  238. ADDRESS_LATCH_INTO();
  239. FLASH_CON_PORT_OUT &=~ ALE;
  240. DATA_PORT_IN_INITIAL;
  241. READ_ONE_DATA();
  242. while (!(FLASH_READ_DATA==0xad));
  243. READ_ONE_DATA();
  244. while (!(FLASH_READ_DATA==0xf1));
  245. READ_ONE_DATA();
  246. READ_ONE_DATA();
  247. }
  248. //***********************************************************************************
  249. void Flash_Reset(void) //flash reset
  250. int i;
  251. COMMAND_VAL=0XFF; //reset command
  252. COMMAND_LATCH_INTO();
  253. for (i=0;i<3000;i++); //delay 
  254. }
  255. //***********************************************************************************
  256. void COMMAND_LATCH_INTO(void) //FLASH CONTROL PORT
  257. {
  258. FLASH_CON_PORT_OUT |= CLE; //COMMAND LATCH ENABLE
  259. FLASH_CON_PORT_OUT &= ~(CE|WE); //CHIP ENABLE WRITE ENABLE
  260. DATA_PORT_OUT_INITIAL; //MCU OUTPUT,FLASH READ COMMAND
  261. DATA_PORT_OUT=COMMAND_VAL; //DATA SETUP
  262. FLASH_CON_PORT_OUT |= WE; //LATCH INTO THE COMMAND
  263.                 FLASH_CON_PORT_OUT&= ~CLE;
  264. }
  265. //********************************************************
  266. void ADDRESS_LATCH_INTO(void)
  267. {
  268. FLASH_CON_PORT_OUT |= ALE;
  269. FLASH_CON_PORT_OUT &=~ (CLE|WE);
  270. DATA_PORT_OUT_INITIAL; //MCU OUTPUT,FLASH READ ADDRESS
  271. DATA_PORT_OUT=ADDRESS_VALUE;
  272. FLASH_CON_PORT_OUT |= WE; //LATCH INTO THE ADDRESS
  273. //FLASH_CON_PORT_OUT &=~ ALE;
  274. }
  275. /********************************************************
  276. void WRITE_ONE_DATA(void)
  277. {
  278. FLASH_CON_PORT_OUT&=~WE;
  279. //DATA_PORT_OUT_INITIAL; //MCU OUTPUT,MCU WRITE A DATA TO FLASH
  280. DATA_PORT_OUT=FLASH_WRITE_DATA;
  281. FLASH_CON_PORT_OUT |= WE; //LATCH INTO ONE DATA
  282. }
  283. ********************************************************/
  284. void READ_ONE_DATA(void)
  285. {
  286. FLASH_CON_PORT_OUT &=~ RE; //RE IS LOW,ENABLE READ DATA
  287. //DATA_PORT_IN_INITIAL; //MCU INPUT,MCU READ A DATA
  288. FLASH_READ_DATA=DATA_PORT_IN;
  289. FLASH_CON_PORT_OUT |= RE;
  290. }