OpenCores
URL https://opencores.org/ocsvn/layer2/layer2/trunk

Subversion Repositories layer2

[/] [layer2/] [trunk/] [sw/] [lib/] [flash.c] - Blame information for rev 3

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 idiolatrie
/******************************************************************************
2
 * Numonyx™ 128 Mbit EMBEDDED FLASH MEMORY J3 Version D                       *
3
 ******************************************************************************
4
 * Copyright (C)2011  Mathias Hörtnagl <mathias.hoertnagl@gmail.com>          *
5
 *                                                                            *
6
 * This program is free software: you can redistribute it and/or modify       *
7
 * it under the terms of the GNU General Public License as published by       *
8
 * the Free Software Foundation, either version 3 of the License, or          *
9
 * (at your option) any later version.                                        *
10
 *                                                                            *
11
 * This program is distributed in the hope that it will be useful,            *
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
14
 * GNU General Public License for more details.                               *
15
 *                                                                            *
16
 * You should have received a copy of the GNU General Public License          *
17
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.      *
18
 ******************************************************************************/
19
#include "stddef.h"
20
#include "flash.h"
21
 
22
/* Read the status register. */
23
uchar flash_read_status() {
24
   FLASH_MEMORY[0] = CMD_READ_SR;
25
   return FLASH_MEMORY[0];
26
}
27
 
28
/* Clear the status register. */
29
void flash_clear_sr() {
30
   FLASH_MEMORY[0] = CMD_CLEAR_SR;
31
}
32
 
33
/* Write a byte of data to a specific device address.
34
   Writing only changes '1' to '0'. If you overwrite data that would change '0'
35
   to '1', erase the block beforhand. */
36
void flash_write(uint adr, uchar b) {
37
   FLASH_MEMORY[adr] = CMD_BYTE_PROGRAM;
38
   FLASH_MEMORY[adr] = b;
39
}
40
 
41
/* Read 32bit of data from a specific device address.
42
   Issues a Read Array Command each time, although device stays in Array Read
43
   mode until another command operation takes place. */
44
uint flash_read(uint adr) {
45
   FLASH_MEMORY[0] = CMD_READ_ARRAY;
46
   return ( (volatile uint *) FLASH_MEMORY )[adr];
47
}
48
 
49
/* Erase block. Point to an address within the block address space you want to
50
   erase. 16 Mbytes, organized as 128-Kbyte erase blocks. */
51
void flash_block_erase(uint blk) {
52
   FLASH_MEMORY[blk] = CMD_BLOCK_ERASE_SETUP;
53
   FLASH_MEMORY[blk] = CMD_BLOCK_ERASE_CONFIRM;
54
}
55
 
56
/* Wait for the end of a operation and return the status register when ready.
57
   Block erasure and writing data takes longer than a WB write operation.
58
   So after each erase or write one should call flash_wait() or do something
59
   else meanwhile. */
60
uchar flash_wait() {
61
 
62
   uchar s;
63
 
64
   while( !( (s = flash_read_status()) & FLASH_READY) );
65
   return s;
66
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.