<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LPC Microcontrollersのトピックwriting and reading serial flash memory W25Q12BV with a LPC1114</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/writing-and-reading-serial-flash-memory-W25Q12BV-with-a-LPC1114/m-p/530838#M10089</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ALERICO90 on Tue Feb 03 06:30:19 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello, I have some routines to read and write to a memory made by someone else but I can't find how to make them work properly, here is the code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "includes.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterRead (0x05)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BUSY (1 &amp;lt;&amp;lt; 0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define WEL (1 &amp;lt;&amp;lt; 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP0 (1 &amp;lt;&amp;lt; 2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP1 (1 &amp;lt;&amp;lt; 3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP2 (1 &amp;lt;&amp;lt; 4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define RESERVED (1 &amp;lt;&amp;lt; 5)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define AAI (1 &amp;lt;&amp;lt; 6)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BPL (1 &amp;lt;&amp;lt; 7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeWriteEnable (0x06)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeWriteDisable (0x04)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBusyOutputEnable (0x70)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBusyOutputDisable (0x80)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterWriteEnable (0x50)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterWrite (0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadElectronicSignature (0xab)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadJedecId (0x9f)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadId (0x90)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeRead (0x03)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeFastRead (0x0b)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeByteProgram (0x02)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeAAIWordProgram (0xad)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodePageProgram (0x02)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBlockErase (0xd8)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeSectorErase (0x20)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeChipErase (0xc7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_manufactory;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_ShiftOutAddrWrite(uint8_t opcode, uint32_t addr)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcode);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_StatusRegisterRead(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterRead);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_WriteEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeWriteEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_WriteDisable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeWriteDisable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_BusyOutputEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeBusyOutputEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_BusyOutputDisable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeBusyOutputDisable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_StatusRegisterWriteEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterWriteEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_StatusRegisterWrite(uint8_t status)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterWrite);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(status);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_Init(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Deselect the FLASH: Chip Select high */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_ReadJedecId(uint8_t *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeReadJedecId);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = F25L_manufactory = SPISwapDataMSB(0xFF); // Manufactory&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF); // ID(15~8)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf = SPISwapDataMSB(0xFF); // ID(7~0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_ReadId(uint8_t *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeReadId);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = F25L_manufactory = SPISwapDataMSB(0xFF); // Manufactory&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf = SPISwapDataMSB(0xFF); // ID(7~0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_ReadElectronicSignature(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeReadElectronicSignature);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_Read(uint32_t addr, uint8_t *buf, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_BuffCmpCanWrite(uint32_t addr, uint8_t *buf, uint32_t&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--,buf++)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if ((*buf &amp;amp; SPISwapDataMSB(0xFF)) != *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_FastRead(uint32_t addr, uint8_t *buf, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeFastRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0xff); // dummy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_ByteProgram(uint32_t addr, uint8_t dat)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeByteProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(dat);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(dat == SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret&amp;nbsp; = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_AAIWordProgram(uint32_t addr, uint8_t *dat, uint32_t&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;words)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t *p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(words == 0) return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;p = dat;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = words;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeAAIWordProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i--;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; i; i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeAAIWordProgram);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteDisable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (i=(words &amp;lt;&amp;lt; 1),ret=TRUE; i; i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(*dat != SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F16_PageProgram(uint32_t addr, uint8_t *dat, uint32_t len)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t *p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(len == 0) return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;p = dat;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodePageProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; len; len--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (*dat++ != SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_BuffProgram(uint32_t addr, uint8_t *dat, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;switch(F25L_manufactory)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x1c: // EON&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0xc2: // MXIC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0xef: // Winbond&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;default:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;max_len = 0x100 - (addr &amp;amp; 0xff);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(max_len &amp;gt; bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;max_len = bytes;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F16_PageProgram(addr, dat, max_len);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;addr += max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat += max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes -= max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x8c: // ESMT&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (addr &amp;amp; 0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_ByteProgram(addr,*dat);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;addr++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes--;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (bytes == 0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_AAIWordProgram(addr,dat,bytes/2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (bytes &amp;amp; 0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_ByteProgram(addr+(bytes/2)2,(dat + bytes-1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and here is the other part&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "includes.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPI_NCS_HIGH() do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICS, 1);\&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPI_NCS_LOW() do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOSetValue(0, P0_SPICS, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPISclkHigh() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICLK, 1);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPISclkLow() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICLK, 0);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMOSIHigh() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPIMOSI, 1);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMOSILow() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPIMOSI, 0);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMISORead()&amp;nbsp;&amp;nbsp; (LPC_GPIO0-&amp;gt;DATA &amp;amp;(1&amp;lt;&amp;lt;P0_SPIMISO))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void SPIDelay(uint32_t tm)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile uint32_t t;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tm &amp;lt;&amp;lt;= 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;t = tm;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(t--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//static OS_EVENT *spi_sem_event;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void SPISemInit(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//spi_sem_event = OSSemCreate(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPISemGet(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//uint8_t err;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//OSSemPend(spi_sem_event, 0, &amp;amp;err);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPISemPut(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//OSSemPost(spi_sem_event);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPIInit(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Configure I/O for Flash Chip select */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPICS, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_2 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* SCLK */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPICLK, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;SWCLK_PIO0_10 = (2&amp;lt;&amp;lt;3)|(1&amp;lt;&amp;lt;0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* MOSI */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPIMOSI, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_9 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* MISO */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPIMISO, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_8 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemInit();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPICSLow(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPI_NCS_LOW();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPICSHigh(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPI_NCS_HIGH();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint32_t SPISwapDataLSB(uint32_t dat, uint8_t bits)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t rx;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (i=0, rx=0; i&amp;lt;bits; i++)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (dat &amp;amp; (1 &amp;lt;&amp;lt; i))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // LSB first&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rx |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return rx;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPIShiftDataMSB(uint8_t dat)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (dat &amp;amp; (1 &amp;lt;&amp;lt; i))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MSB first&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t SPISwapDataMSB(uint8_t out)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow(); // clk = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(out &amp;amp; (1 &amp;lt;&amp;lt; i))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // clk = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t SPISwapDataMSBSlow(uint8_t out)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow(); // clk = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(out &amp;amp; (1 &amp;lt;&amp;lt; i))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(75); // 7.5us&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // clk = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(75); // 7.5us&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------------------------------------------------------------------------------------------------------&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int main( void )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EVENT_T evt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//SysTick_Config(SystemFrequency/100000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// No se utliza OSTimeDly en esta sección&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__disable_irq();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;system_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{//uint8_t buf[6];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t buf[SPEC12832RowNum*SPEC12832ColumnNum/8];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t c;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPEC12832Select(LCD_SELECT_USER | LCD_SELECT_CUSTOM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset(buf, 0x00, sizeof(buf));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPEC12832DisplayPattern(buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset(screen1,'0',sizeof(screen1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; screen1[0]='A';&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;screen1[1]='B';&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//KeyScanProc(buf,screen1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//F25L_AAIWordProgram(0x80000,screen1,2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_BuffCmpCanWrite(0x0, screen1, sizeof(screen1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_FastRead(0x0,screen22,sizeof(screen22));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CharToDot(screen22[5],5,16*16,1,buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CharToDot('I',6,16*16,1,buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:33:34 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:33:34Z</dc:date>
    <item>
      <title>writing and reading serial flash memory W25Q12BV with a LPC1114</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/writing-and-reading-serial-flash-memory-W25Q12BV-with-a-LPC1114/m-p/530838#M10089</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ALERICO90 on Tue Feb 03 06:30:19 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello, I have some routines to read and write to a memory made by someone else but I can't find how to make them work properly, here is the code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "includes.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterRead (0x05)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BUSY (1 &amp;lt;&amp;lt; 0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define WEL (1 &amp;lt;&amp;lt; 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP0 (1 &amp;lt;&amp;lt; 2)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP1 (1 &amp;lt;&amp;lt; 3)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BP2 (1 &amp;lt;&amp;lt; 4)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define RESERVED (1 &amp;lt;&amp;lt; 5)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define AAI (1 &amp;lt;&amp;lt; 6)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define BPL (1 &amp;lt;&amp;lt; 7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeWriteEnable (0x06)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeWriteDisable (0x04)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBusyOutputEnable (0x70)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBusyOutputDisable (0x80)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterWriteEnable (0x50)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeStatusRegisterWrite (0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadElectronicSignature (0xab)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadJedecId (0x9f)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeReadId (0x90)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeRead (0x03)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeFastRead (0x0b)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeByteProgram (0x02)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeAAIWordProgram (0xad)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodePageProgram (0x02)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeBlockErase (0xd8)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeSectorErase (0x20)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define opcodeChipErase (0xc7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_manufactory;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_ShiftOutAddrWrite(uint8_t opcode, uint32_t addr)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcode);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(addr &amp;gt;&amp;gt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_StatusRegisterRead(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterRead);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_WriteEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeWriteEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_WriteDisable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeWriteDisable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_BusyOutputEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeBusyOutputEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#if 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_BusyOutputDisable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeBusyOutputDisable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_StatusRegisterWriteEnable(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterWriteEnable);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void F25L_StatusRegisterWrite(uint8_t status)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeStatusRegisterWrite);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(status);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_Init(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Deselect the FLASH: Chip Select high */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_ReadJedecId(uint8_t *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISwapDataMSB(opcodeReadJedecId);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = F25L_manufactory = SPISwapDataMSB(0xFF); // Manufactory&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF); // ID(15~8)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf = SPISwapDataMSB(0xFF); // ID(7~0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_ReadId(uint8_t *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeReadId);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = F25L_manufactory = SPISwapDataMSB(0xFF); // Manufactory&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf = SPISwapDataMSB(0xFF); // ID(7~0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_ReadElectronicSignature(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeReadElectronicSignature);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_Read(uint32_t addr, uint8_t *buf, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_BuffCmpCanWrite(uint32_t addr, uint8_t *buf, uint32_t&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--,buf++)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if ((*buf &amp;amp; SPISwapDataMSB(0xFF)) != *buf)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void F25L_FastRead(uint32_t addr, uint8_t *buf, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeFastRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(0xff); // dummy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; bytes; bytes--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*buf++ = SPISwapDataMSB(0xFF);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_ByteProgram(uint32_t addr, uint8_t dat)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeByteProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(dat);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(dat == SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret&amp;nbsp; = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F25L_AAIWordProgram(uint32_t addr, uint8_t *dat, uint32_t&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;words)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t *p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(words == 0) return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;p = dat;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = words;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeAAIWordProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i--;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; i; i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(opcodeAAIWordProgram);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteDisable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (i=(words &amp;lt;&amp;lt; 1),ret=TRUE; i; i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(*dat != SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint8_t F16_PageProgram(uint32_t addr, uint8_t *dat, uint32_t len)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t *p;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(len == 0) return TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;p = dat;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemGet();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_StatusRegisterWrite(0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_WriteEnable();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodePageProgram, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(i--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIShiftDataMSB(*p++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (F25L_StatusRegisterRead() &amp;amp; BUSY);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_ShiftOutAddrWrite(opcodeRead, addr);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (; len; len--)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (*dat++ != SPISwapDataMSB(0xFF))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret = FALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemPut();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t F25L_BuffProgram(uint32_t addr, uint8_t *dat, uint32_t bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t ret = TRUE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;switch(F25L_manufactory)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x1c: // EON&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0xc2: // MXIC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0xef: // Winbond&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;default:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;max_len = 0x100 - (addr &amp;amp; 0xff);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(max_len &amp;gt; bytes)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;max_len = bytes;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F16_PageProgram(addr, dat, max_len);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;addr += max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat += max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes -= max_len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;case 0x8c: // ESMT&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (addr &amp;amp; 0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_ByteProgram(addr,*dat);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;addr++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dat++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bytes--;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (bytes == 0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_AAIWordProgram(addr,dat,bytes/2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (bytes &amp;amp; 0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ret &amp;amp;= F25L_ByteProgram(addr+(bytes/2)2,(dat + bytes-1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return ret;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and here is the other part&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "includes.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPI_NCS_HIGH() do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICS, 1);\&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPI_NCS_LOW() do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOSetValue(0, P0_SPICS, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPISclkHigh() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICLK, 1);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPISclkLow() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPICLK, 0);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMOSIHigh() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPIMOSI, 1);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMOSILow() \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do{ \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetValue(0, P0_SPIMOSI, 0);&amp;nbsp;&amp;nbsp; \&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define SPIMISORead()&amp;nbsp;&amp;nbsp; (LPC_GPIO0-&amp;gt;DATA &amp;amp;(1&amp;lt;&amp;lt;P0_SPIMISO))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void SPIDelay(uint32_t tm)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile uint32_t t;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tm &amp;lt;&amp;lt;= 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;t = tm;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(t--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//static OS_EVENT *spi_sem_event;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void SPISemInit(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//spi_sem_event = OSSemCreate(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPISemGet(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//uint8_t err;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//OSSemPend(spi_sem_event, 0, &amp;amp;err);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPISemPut(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//OSSemPost(spi_sem_event);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPIInit(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Configure I/O for Flash Chip select */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPICS, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_2 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPICSHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* SCLK */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPICLK, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;SWCLK_PIO0_10 = (2&amp;lt;&amp;lt;3)|(1&amp;lt;&amp;lt;0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* MOSI */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPIMOSI, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_9 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* MISO */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPIOSetDir(0, P0_SPIMISO, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_IOCON-&amp;gt;PIO0_8 = IOCON_PIO;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISemInit();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPICSLow(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPI_NCS_LOW();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPICSHigh(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPI_NCS_HIGH();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint32_t SPISwapDataLSB(uint32_t dat, uint8_t bits)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t rx;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for (i=0, rx=0; i&amp;lt;bits; i++)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (dat &amp;amp; (1 &amp;lt;&amp;lt; i))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // LSB first&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rx |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return rx;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern void SPIShiftDataMSB(uint8_t dat)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (dat &amp;amp; (1 &amp;lt;&amp;lt; i))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MSB first&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // rising edge latch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t SPISwapDataMSB(uint8_t out)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow(); // clk = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(out &amp;amp; (1 &amp;lt;&amp;lt; i))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // clk = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//=============================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint8_t SPISwapDataMSBSlow(uint8_t out)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t i;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i = 7;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkLow(); // clk = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(out &amp;amp; (1 &amp;lt;&amp;lt; i))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSIHigh();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIMOSILow();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(75); // 7.5us&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(SPIMISORead())&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in |= (1 &amp;lt;&amp;lt; i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPISclkHigh(); // clk = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPIDelay(75); // 7.5us&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}while(i--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;return in;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------------------------------------------------------------------------------------------------------&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int main( void )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EVENT_T evt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//SysTick_Config(SystemFrequency/100000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// No se utliza OSTimeDly en esta sección&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__disable_irq();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;system_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{//uint8_t buf[6];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t buf[SPEC12832RowNum*SPEC12832ColumnNum/8];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t c;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPEC12832Select(LCD_SELECT_USER | LCD_SELECT_CUSTOM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset(buf, 0x00, sizeof(buf));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SPEC12832DisplayPattern(buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;memset(screen1,'0',sizeof(screen1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; screen1[0]='A';&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;screen1[1]='B';&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//KeyScanProc(buf,screen1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//F25L_AAIWordProgram(0x80000,screen1,2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_BuffCmpCanWrite(0x0, screen1, sizeof(screen1));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F25L_FastRead(0x0,screen22,sizeof(screen22));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CharToDot(screen22[5],5,16*16,1,buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CharToDot('I',6,16*16,1,buf);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:33:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/writing-and-reading-serial-flash-memory-W25Q12BV-with-a-LPC1114/m-p/530838#M10089</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:33:34Z</dc:date>
    </item>
  </channel>
</rss>

