Contiki 2.6

m25p16.c File Reference

This file provides functions to control the M25P16 on sensinode N740s. More...

#include "dev/n740.h"
#include "dev/m25p16.h"
#include "sys/clock.h"
#include "sys/energest.h"
#include "cc2430_sfr.h"

Go to the source code of this file.

Functions

void m25p16_wren ()
 Write Enable (WREN) instruction.
void m25p16_wrdi ()
 Write Disable (WRDI) instruction.
void m25p16_rdid (struct m25p16_rdid *rdid)
 Read Identifier (RDID)instruction.
uint8_t m25p16_rdsr ()
 Read Status Register (RDSR) instruction.
void m25p16_wrsr (uint8_t val)
 Write Status Register (WRSR) instruction.
void m25p16_read (uint8_t *addr, uint8_t *buff, uint8_t buff_len)
 Read Data Bytes (READ) instruction.
void m25p16_pp (uint8_t *addr, uint8_t *buff, uint8_t buff_len)
 Program Page (PP) instruction.
void m25p16_se (uint8_t s)
 Sector Erase (SE) instruction.
void m25p16_be ()
 Bulk Erase (SE) instruction.
void m25p16_dp ()
 Deep Power Down (DP) instruction.
void m25p16_res ()
 Release from Deep Power Down (RES) instruction.
uint8_t m25p16_res_res ()
 Release Deep Power Down.

Detailed Description

This file provides functions to control the M25P16 on sensinode N740s.

This is a Numonyx Forte Serial Flash Memory (16Mbit) The S signal (Chip Select) is controlled via 0x02 on the 74HC595D The other instructions and timing are performed with bit bang

We can enable, disable, read/write data, erase pages, hold, enter/exit deep sleep etc.

Clock (C) => P1_5, Ser. I (D) => P1_6, Ser. O (Q) => P1_7, Hold => Pull Up, Write Prot => Pull Up, Chip Sel => 74HC595D (0x02)

This file can be placed in any bank.

Author:
George Oikonomou - <oikonomou@users.sourceforge.net>

Definition in file m25p16.c.


Function Documentation

void m25p16_be ( )

Bulk Erase (SE) instruction.

Delete the entire memory, by setting it's contents to all 0xFF (which will read as 0x00 by READ).

This function will set the WEL bit on the SR before attempting to write, so the calling function doesn't need to worry about this.

This call is asynchronous. It will return before the write cycle has completed. Thus, user software must check the WIP bit Write In Progress) before sending further instructions.

This instructions takes a very long time to complete and must be used with care. It can take up to 40 secs (yes, secs). A typical duration is 13 secs

Definition at line 263 of file m25p16.c.

References m25p16_wren().

void m25p16_dp ( )

Deep Power Down (DP) instruction.

Puts the device into its lowers power consumption mode (This is not the same as the stand-by mode caused by de-selecting the device). While the device is in DP, it will accept no instruction except a RES (Release from DP).

This call is asynchronous and will return as soon as the instruction sequence has been written but before the device has actually entered DP

Dropping to DP takes 3usec and Resuming from DP takes at least 1.8usec, so this sequence should not be used when the sleep interval is estimated to be short (read as: don't DP then RES then DP repeatedly)

Definition at line 273 of file m25p16.c.

void m25p16_pp ( uint8_t *  addr,
uint8_t *  buff,
uint8_t  buff_len 
)

Program Page (PP) instruction.

Parameters:
addr3 byte array holding the write start address. MSB stored in addr[0] and LSB in addr[2]
buffPointer to a buffer with the data to be written
buff_lenNumber of bytes to write, Maximum 256 bytes.

Write BUFF_LEN bytes stored in BUFF to flash, starting from location ADDR. BUFF_LEN may not exceed 256. ADDR should point to a 3 byte array, with the address MSB stored in position 0 and LSB in position 2

If the start address + buff_len exceed page boundaries, the write will wrap to the start of the same page (the page at addr[2:1]).

The bytes will be inverted before being written, so that a value of 0xFF will be written as 0x00 (and subsequently correctly read as 0xFF by READ)

This function will set the WEL bit on the SR before attempting to write, so the calling function doesn't need to worry about this.

This call is asynchronous. It will return before the write cycle has completed. Thus, user software must check the WIP bit Write In Progress) before sending further instructions. This can take up to 5 msecs (typical duration for a 256 byte write is 640 usec)

Definition at line 224 of file m25p16.c.

References m25p16_wren().

void m25p16_rdid ( struct m25p16_rdid rdid)

Read Identifier (RDID)instruction.

Parameters:
rdidPointer to a struct which will hold the information returned by the RDID instruction

Definition at line 149 of file m25p16.c.

References m25p16_rdid::mem_size, m25p16_rdid::mem_type, m25p16_rdid::uid, and m25p16_rdid::uid_len.

uint8_t m25p16_rdsr ( )

Read Status Register (RDSR) instruction.

Returns:
Value of the status register

Reads and returns the value of the status register on the Flash Chip

Definition at line 167 of file m25p16.c.

void m25p16_read ( uint8_t *  addr,
uint8_t *  buff,
uint8_t  buff_len 
)

Read Data Bytes (READ) instruction.

Parameters:
addr3 byte array holding the read start address. MSB stored in addr[0] and LSB in addr[2]
buffPointer to a buffer to hold the read bytes.
buff_lenNumber of bytes to read. buff must be long enough to hold buff_len bytes

The bytes will be inverted after being read, so that a value of 0xFF (empty) in the flash will read as 0x00

Definition at line 193 of file m25p16.c.

void m25p16_res ( )

Release from Deep Power Down (RES) instruction.

Take the device out of the Deep Power Down mode and bring it to standby. Does not read the electronic signature.

This call is synchronous. When it returns the device will be in standby mode.

Dropping to DP takes 3usec and Resuming from DP takes at least 1.8usec, so this sequence should not be used when the sleep interval is estimated to be short (read as: don't DP then RES then DP repeatedly)

Definition at line 284 of file m25p16.c.

References M25P16_WIP.

uint8_t m25p16_res_res ( )

Release Deep Power Down.

Release from Deep Power Down (RES) and Read Electronic Signature instruction.

Read and return the Electronic Signature must return 0x14

Returns:
The old style Electronic Signature. This must be 0x14

Definition at line 299 of file m25p16.c.

References M25P16_WIP.

void m25p16_se ( uint8_t  s)

Sector Erase (SE) instruction.

Parameters:
sThe number of the sector to be erased

Delete the entire sector number s, by setting it's contents to all 0xFF (which will read as 0x00 by READ). The flash is broken down into 32 sectors, 64 KBytes each.

This function will set the WEL bit on the SR before attempting to write, so the calling function doesn't need to worry about this.

This call is asynchronous. It will return before the write cycle has completed. Thus, user software must check the WIP bit Write In Progress) before sending further instructions. This can take up to 3 secs (typical duration 600 msec)

Definition at line 248 of file m25p16.c.

References m25p16_wren().

void m25p16_wren ( )

Write Enable (WREN) instruction.

Completing a WRDI, PP, SE, BE and WRSR resets the write enable latch bit, so this instruction should be used every time before trying to write.

Definition at line 131 of file m25p16.c.

References M25P16_WEL.

Referenced by m25p16_be(), m25p16_pp(), m25p16_se(), and m25p16_wrsr().

void m25p16_wrsr ( uint8_t  val)

Write Status Register (WRSR) instruction.

Parameters:
valValue to be written to the status register

This instruction does not afect bits 6, 5, 1 and 0 of the SR.

Definition at line 180 of file m25p16.c.

References m25p16_wren().