57 #include "sys/clock.h"
61 #define CLOCK_RISING() {M25P16_PIN_CLOCK = 1; M25P16_PIN_CLOCK = 0;}
62 #define CLOCK_FALLING() {M25P16_PIN_CLOCK = 0; M25P16_PIN_CLOCK = 1;}
66 bit_bang_write(uint8_t byte) CC_NON_BANKED
72 for(i = 0x80; i > 0; i >>= 1) {
80 M25P16_PIN_SER_I = bit;
88 bit_bang_read() CC_NON_BANKED
94 for(i = 7; i >= 0; i--) {
99 bits |= (M25P16_PIN_SER_O << i);
105 select() CC_NON_BANKED
108 uint8_t ser_par = n740_ser_par_get();
110 M25P16_PIN_CLOCK = 0;
112 ser_par &= ~N740_SER_PAR_CHIP_SEL;
115 n740_ser_par_set(ser_par);
119 deselect() CC_NON_BANKED
122 uint8_t ser_par = n740_ser_par_get();
124 ser_par |= N740_SER_PAR_CHIP_SEL;
127 n740_ser_par_set(ser_par);
134 bit_bang_write(M25P16_I_WREN);
144 bit_bang_write(M25P16_I_WRDI);
154 bit_bang_write(M25P16_I_RDID);
156 rdid->man_id = bit_bang_read();
159 rdid->
uid_len = bit_bang_read();
160 for(i = 0; i < rdid->
uid_len; i++) {
161 rdid->
uid[i] = bit_bang_read();
172 bit_bang_write(M25P16_I_RDSR);
173 rv = bit_bang_read();
185 ENERGEST_ON(ENERGEST_TYPE_FLASH_WRITE);
186 bit_bang_write(M25P16_I_WRSR);
188 ENERGEST_OFF(ENERGEST_TYPE_FLASH_WRITE);
198 ENERGEST_ON(ENERGEST_TYPE_FLASH_READ);
201 bit_bang_write(M25P16_I_FAST_READ);
203 bit_bang_write(M25P16_I_READ);
207 for(i = 0; i < 3; i++) {
208 bit_bang_write(addr[i]);
213 bit_bang_write(M25P16_DUMMY_BYTE);
216 for(i = 0; i < buff_len; i++) {
217 buff[i] = ~bit_bang_read();
219 ENERGEST_OFF(ENERGEST_TYPE_FLASH_READ);
224 m25p16_pp(uint8_t * addr, uint8_t * buff, uint8_t buff_len)
231 ENERGEST_ON(ENERGEST_TYPE_FLASH_WRITE);
232 bit_bang_write(M25P16_I_PP);
235 for(i = 0; i < 3; i++) {
236 bit_bang_write(addr[i]);
240 for(i = 0; i < buff_len; i++) {
241 bit_bang_write(~buff[i]);
243 ENERGEST_OFF(ENERGEST_TYPE_FLASH_WRITE);
253 ENERGEST_ON(ENERGEST_TYPE_FLASH_WRITE);
254 bit_bang_write(M25P16_I_SE);
256 bit_bang_write(0x00);
257 bit_bang_write(0x00);
259 ENERGEST_OFF(ENERGEST_TYPE_FLASH_WRITE);
268 bit_bang_write(M25P16_I_BE);
276 bit_bang_write(M25P16_I_DP);
287 bit_bang_write(M25P16_I_RES);
305 bit_bang_write(M25P16_I_RES);
306 bit_bang_write(M25P16_DUMMY_BYTE);
307 bit_bang_write(M25P16_DUMMY_BYTE);
308 bit_bang_write(M25P16_DUMMY_BYTE);
310 rv = bit_bang_read();
CC2430 registers header file for CC2430.
uint8_t uid_len
Memory Size.
uint8_t m25p16_rdsr()
Read Status Register (RDSR) instruction.
Header file for the control of the M25P16 on sensinode N740s.
void m25p16_pp(uint8_t *addr, uint8_t *buff, uint8_t buff_len)
Program Page (PP) instruction.
uint8_t m25p16_res_res()
Release Deep Power Down.
void m25p16_read(uint8_t *addr, uint8_t *buff, uint8_t buff_len)
Read Data Bytes (READ) instruction.
Header file for the energy estimation mechanism
void m25p16_wren()
Write Enable (WREN) instruction.
Header File for the module which controls the Sensinode N740 8-bit serial-in/serial or parall...
void m25p16_rdid(struct m25p16_rdid *rdid)
Read Identifier (RDID)instruction.
uint8_t uid[16]
Unique ID length.
void m25p16_wrsr(uint8_t val)
Write Status Register (WRSR) instruction.
uint8_t mem_type
Manufacturer ID.
void m25p16_dp()
Deep Power Down (DP) instruction.
void m25p16_se(uint8_t s)
Sector Erase (SE) instruction.
#define M25P16_WEL()
Check for Write-Enable.
void m25p16_be()
Bulk Erase (SE) instruction.
void m25p16_wrdi()
Write Disable (WRDI) instruction.
#define M25P16_WIP()
Check for Write in Progress.
uint8_t mem_size
Memory Type.
void m25p16_res()
Release from Deep Power Down (RES) instruction.