<?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>topic MC9S08QG8: Help getting SPI to work with external EEPROM in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153579#M8582</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi, this is my first post and I am in need of some assistance.&amp;nbsp; I am trying to use Microchip 25AA512 EEPROM via spi and am running into quite a few problems.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Datasheet for EEPROM: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22021E.pdf" rel="nofollow" target="_blank"&gt;http://ww1.microchip.com/downloads/en/DeviceDoc/22021E.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Datasheet for&amp;nbsp; S08QG8: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22021E.pdf" rel="nofollow" target="_blank"&gt;http://ww1.microchip.com/downloads/en/DeviceDoc/22021E.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem I'm getting is a lack of response from the EEPROM.&amp;nbsp; I'm sending out what I believe to be the correct code to start it up, however I don't get any response back from the chip.&amp;nbsp; I have verified this fact vie logic analyzer attached to all EEPROM perifrials.&amp;nbsp; Below is the initialization code I have written.&amp;nbsp; However, I am using beans and have uploaded the entire project in a zip file (project is called newproject).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you to anyone who can help me figure this out.&amp;nbsp; (My guess is that it may be due to timing, but then again, this is the first time I've ever used a MC so I can't be all that sure).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/** EEprom power up follows the initialization sequence&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; specified in the EEprom data sheet for 25AA512 EEPROM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; Each Send is required.&amp;nbsp; Also, assume that !CS is tied&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; to ground, !HOLD and !WP are tied high.&amp;nbsp; This is done&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; off chip (these pins are not hooked up to the mcu and&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; require no mcu pins to be set: done to maximize usabl&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; i/o pins).&amp;nbsp; All EEprom OP-Codes are defined.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; SPI hardware settings are managed by the SWSPI bean.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; - SPI1_SendChar(char ch)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; - SPI1_RecvChar(char *ch)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void powerUpEEprom(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI2_Init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; waitAbit();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define READ&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read&amp;nbsp; from mem array beg. at selected address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRITE&amp;nbsp;&amp;nbsp; 0x02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write to mem array beg. at selected address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WREN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x06&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set&amp;nbsp;&amp;nbsp; the latch (enable write operations)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRDI&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reset the latch (disable write operations)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define RDSR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x05&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – STATUS register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRSR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – STATUS register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define PE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Page Erase&amp;nbsp;&amp;nbsp; – erase one page in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define SE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xD8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Sector Erase – erase one sector in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Chip Erase&amp;nbsp;&amp;nbsp; – erase all sectors in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRDI);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRSR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRITE);&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, PE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, SE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, CE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WREN);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPID;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, 0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PULSE TO LATCH WRITE ENABLE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPID;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, RDSR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check write enable set correctly (Read Status Reg on EEPROM)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPRF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, 0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPRF != 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for eeprom to send status&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Save Status&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.freescale.com%2Ffiles%2Fcommunity_files%2F8BITCOMM%2FFreeRTOS-3.2.4-HCS08_Files.zip" rel="nofollow" target="_blank"&gt;FreeRTOS-3.2.4-HCS08_Files.zip&lt;/A&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by dkindler on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-08-20&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;03:32 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 17 Feb 2009 03:45:50 GMT</pubDate>
    <dc:creator>comp_e</dc:creator>
    <dc:date>2009-02-17T03:45:50Z</dc:date>
    <item>
      <title>MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153579#M8582</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi, this is my first post and I am in need of some assistance.&amp;nbsp; I am trying to use Microchip 25AA512 EEPROM via spi and am running into quite a few problems.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Datasheet for EEPROM: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22021E.pdf" rel="nofollow" target="_blank"&gt;http://ww1.microchip.com/downloads/en/DeviceDoc/22021E.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Datasheet for&amp;nbsp; S08QG8: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22021E.pdf" rel="nofollow" target="_blank"&gt;http://ww1.microchip.com/downloads/en/DeviceDoc/22021E.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem I'm getting is a lack of response from the EEPROM.&amp;nbsp; I'm sending out what I believe to be the correct code to start it up, however I don't get any response back from the chip.&amp;nbsp; I have verified this fact vie logic analyzer attached to all EEPROM perifrials.&amp;nbsp; Below is the initialization code I have written.&amp;nbsp; However, I am using beans and have uploaded the entire project in a zip file (project is called newproject).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you to anyone who can help me figure this out.&amp;nbsp; (My guess is that it may be due to timing, but then again, this is the first time I've ever used a MC so I can't be all that sure).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/** EEprom power up follows the initialization sequence&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; specified in the EEprom data sheet for 25AA512 EEPROM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; Each Send is required.&amp;nbsp; Also, assume that !CS is tied&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; to ground, !HOLD and !WP are tied high.&amp;nbsp; This is done&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; off chip (these pins are not hooked up to the mcu and&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; require no mcu pins to be set: done to maximize usabl&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; i/o pins).&amp;nbsp; All EEprom OP-Codes are defined.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; SPI hardware settings are managed by the SWSPI bean.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; - SPI1_SendChar(char ch)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp; - SPI1_RecvChar(char *ch)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void powerUpEEprom(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI2_Init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; waitAbit();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define READ&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read&amp;nbsp; from mem array beg. at selected address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRITE&amp;nbsp;&amp;nbsp; 0x02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write to mem array beg. at selected address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WREN&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x06&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set&amp;nbsp;&amp;nbsp; the latch (enable write operations)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRDI&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reset the latch (disable write operations)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define RDSR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x05&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – STATUS register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define WRSR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – STATUS register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define PE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Page Erase&amp;nbsp;&amp;nbsp; – erase one page in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define SE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xD8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Sector Erase – erase one sector in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define CE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Chip Erase&amp;nbsp;&amp;nbsp; – erase all sectors in mem array&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRDI);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRSR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WRITE);&amp;nbsp;&amp;nbsp;&amp;nbsp; // data = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, PE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, SE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, CE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, WREN);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPID;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, 0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PULSE TO LATCH WRITE ENABLE&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;PTBD_PTBD6 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;PTBD_PTBD6 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPTEF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIS;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPID;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, RDSR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check write enable set correctly (Read Status Reg on EEPROM)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPRF != 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(SPID, 0x00);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPIS_SPRF != 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for eeprom to send status&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = getReg8(SPID);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Save Status&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.freescale.com%2Ffiles%2Fcommunity_files%2F8BITCOMM%2FFreeRTOS-3.2.4-HCS08_Files.zip" rel="nofollow" target="_blank"&gt;FreeRTOS-3.2.4-HCS08_Files.zip&lt;/A&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by dkindler on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-08-20&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;03:32 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 03:45:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153579#M8582</guid>
      <dc:creator>comp_e</dc:creator>
      <dc:date>2009-02-17T03:45:50Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153580#M8583</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello, and welcome to the forum.&lt;BR /&gt;&lt;BR /&gt;I think there are some problems with the code for your basic SPI transfers.&lt;BR /&gt;&lt;OL&gt;&lt;LI&gt;You will need to manipulate the device CS signal to "frame" each command sequence.&amp;nbsp; CS will normally be allocated to a GPIO pin.&lt;/LI&gt;&lt;LI&gt;To initiate any SPI transfer, the SPID register needs to be written.&lt;/LI&gt;&lt;LI&gt;Before reading the returned byte value within SPID, you need to wait until the SPI transfer is complete, and the SPRF flag is set.&lt;/LI&gt;&lt;/OL&gt;The following function represents the basic SPI transfer process for a single byte.&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="Courier New"&gt;byte SPI_trans( byte val)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while (!SPIS_SPTEF);&amp;nbsp; // Wait until ready to send&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPID = val;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send byte value&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while (!SPIS_SPRF);&amp;nbsp;&amp;nbsp; // Wait until transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return SPID;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/FONT&gt;To send a byte value, and ignore the return value -&lt;BR /&gt;&lt;FONT face="Courier New"&gt;(void) SPI_trans( WREN);&amp;nbsp; // Write enable&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;To read the returned value as a result of sending a dummy byte -&lt;BR /&gt;&lt;FONT face="Courier New"&gt;data = SPI_trans( 0);&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;If you use the forum search engine below, you might find some sample code specifically for serial EEPROM devices.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 09:15:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153580#M8583</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-17T09:15:07Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153581#M8584</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks so much.&amp;nbsp; I was going over the timing diagrams for the EEPROM and couldn't quite make out if they were implying that chip select needed to go high after every transmission.&amp;nbsp; This does lead to one problem though and it may be a fundamental issue in which this mcu implements spi.&amp;nbsp; This particular eeprom clocks in on low clock pulses, which is fine because i just change cpol in the spic1 register.&amp;nbsp; However, I need to set chip select high after i'm done transmitting and assume that I still need a clock pulse.&amp;nbsp; Usually one would just transmit the dummy 0x00 to continu clocking the eeprom.&amp;nbsp; However, the use of cpol results in a deformed clock pulse in which one gets the following wave form.&lt;BR /&gt;&lt;BR /&gt;(low high low high low high low high low high low high low high low high &lt;B&gt;low low&lt;/B&gt; high....)&lt;BR /&gt;&lt;BR /&gt;Will this clock 'deformity' prevent me from latching say, the write enable signal?&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 09:49:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153581#M8584</guid>
      <dc:creator>comp_e</dc:creator>
      <dc:date>2009-02-17T09:49:40Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153582#M8585</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;The settings for both CPHA and CPOL will need to be adjusted to suit the EEPROM device - this can be ascertained from the datasheets.&amp;nbsp; Look at the waveform diagrams for both the EEPROM and the MCU to see what MCU configuration will match the EEPROM requirements.&lt;BR /&gt;&lt;BR /&gt;The CS signal should be set low prior to each command byte being sent, and should not be raised again prior to the transfer of the last byte of the command sequence being completed.&amp;nbsp; At this point, no further clock pulses should be present.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;Just had a quick look at the datasheet.&amp;nbsp; It would appear that the positive edge of the clock is used to latch each data bit, and the device requires settings of either CPHA=0, CPOL=0, or alternatively CPHA=1, CPOL=1.&amp;nbsp; In the first case, the static state for the clock will be low, and high for the second alternative.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2009-02-17&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;01:47 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 10:14:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153582#M8585</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-17T10:14:32Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153583#M8586</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I hate it when people post questions, figure things out and then don't post the solution!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was able to get this working and have provided the .h and .c code used in order to make everything run.&amp;nbsp; This EEPROM is incredibly finicky.&amp;nbsp; I was able to get it to work at 2000KHz and 12.5KHz.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code and a more detailed description is posted on my website @&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://comp-e.com/using-spi-eeprom-25aa512-on-an-hcs08-microcontroller" rel="nofollow" target="_blank"&gt;http://comp-e.com/using-spi-eeprom-25aa512-on-an-hcs08-microcontroller&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by comp-e on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-03-15&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;05:29 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Mar 2009 00:29:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153583#M8586</guid>
      <dc:creator>comp_e</dc:creator>
      <dc:date>2009-03-16T00:29:02Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153584#M8587</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think that a few comments about the code posted on your website are in order. One of your preliminary comments:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;EM&gt;You will notice that slave select pin is not used. Because I only used this one chip, I tied the SS, WP, and HOLD pins to hi/low as per my needs.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Tying the SS (or CS) pin low is not an option for an EEPROM device. The line must be lowered prior to the commencement of a command sequence (to indicate that a command byte will follow), and raised at the completion of the command sequence. For a write or erase command, execution will not commence until this occurs.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There still seems to be some confusion over the role of the SPI flags SPTEF and SPRF. My understanding is that many of the time delays that you have introduced should not be necessary, but were required because of improper handling of the SPRF flag. The amount of delay would also have been dependent on the SPI clock rate chosen. With appropriate handling of SPRF, the clock rate should be non-critical, provided it is less than the maximum limit specified for the EEPROM.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now for some comments on snippets of your code, to outline some of the perceived problems -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Snippet 1:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;void SPI_WREN(void)&lt;BR /&gt;{&lt;BR /&gt;CS_ON;&lt;BR /&gt;delay(2); &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Probably unnecessary for EEPROM&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;while (!(SPIS &amp;amp; 0x20)); // Wait until ready to send&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// SPTEF should normally be already set here&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;SPID = WREN; // Send byte value&lt;BR /&gt;&lt;BR /&gt;delay(1);&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;//&lt;/FONT&gt;&lt;/FONT&gt; &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;Delay is needed for completion of SPI transfer prior to raising CS&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// A better solution is to test the SPRF flag&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;while (!(SPIS &amp;amp; 0x80)); &lt;FONT face="arial,helvetica,sans-serif"&gt;// Wait until transfer is complete&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color="#ff0000"&gt;(void)SPID; &lt;FONT face="arial,helvetica,sans-serif"&gt;// Clears SPRF - prevents overrun on next transfer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;CS_OFF;&lt;BR /&gt;delay(1);&lt;/FONT&gt; &lt;FONT face="courier new,courier"&gt;&lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Unnecessary&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Snippet 2:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;byte SPI_RDSR(void)&lt;BR /&gt;{&lt;BR /&gt;CS_ON;&lt;/FONT&gt;&lt;BR /&gt; &lt;FONT face="courier new,courier"&gt;delay(2);&lt;/FONT&gt; &lt;FONT face="courier new,courier"&gt;&lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Probably unnecessary for EEPROM&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;while (!(SPIS &amp;amp; 0x20)); // Wait until ready to send&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// SPTEF should normally be already set here&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;SPID = RDSR; // Send byte value&lt;BR /&gt;&lt;BR /&gt;while (!(SPIS &amp;amp; 0x20)); // Wait until ready to send&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// SPTEF should again be set because of double buffering&lt;/FONT&gt;&lt;BR /&gt;SPID = DUMMY; // Send byte value&lt;BR /&gt;delay(1); &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Unnecessary&lt;/FONT&gt;&lt;BR /&gt;while (!(SPIS &amp;amp; 0x80)); // Wait until ready to send&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// SPRF will become set on completion of the first byte transfer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// SPID will contain the result of this transfer (invalid value)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="courier new,courier"&gt;&lt;FONT face="arial,helvetica,sans-serif"&gt;// On completion of the second transfer, an overrun state will remain until SPRF is cleared&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// The result of the second transfer will be lost&lt;/FONT&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;delay(4); &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Unnecessary with appropriate SPRF handling&lt;/FONT&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;CS_OFF;&lt;BR /&gt;delay(1); &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// Unnecessary&lt;/FONT&gt;&lt;BR /&gt;return SPID; &lt;FONT color="#ff0000" face="arial,helvetica,sans-serif"&gt;// This read will clear both SPRF and the overrun state&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are many other instances throughout the code with similar issues. The cardinal rule for SPI master transfers -&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;EM&gt;Wait until each byte transfer is complete, and then always clear the SPRF flag to prevent an overrun condition.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;If this is strictly followed, there should be few timing issues. While I have not used the 25AA512 device, I have used smaller capacity SPI EEPROM devices - I cannot see that there are more severe timing requirements for the larger device, and I do not know of any special power-up requirements.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;See what you make of the attached experimental code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;DIV class="message-edit-history"&gt;&lt;SPAN class="edit-author"&gt;Message Edited by bigmac on&lt;/SPAN&gt; &lt;SPAN class="local-date"&gt;2009-03-19&lt;/SPAN&gt; &lt;SPAN class="local-time"&gt;03:42 PM&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Mar 2009 11:34:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153584#M8587</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-03-19T11:34:27Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153585#M8588</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I did retain control of the CS pin but the SS pin was tied since I didn't have a need for it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I will try out your code as it's quite a bit cleaner, but I did try to follow your previous suggestion.&amp;nbsp; Problem was, when I hooked it up to the logic analyzer the while( ... ) was clearing before the 8 clock tics finished going out.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Mar 2009 12:06:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153585#M8588</guid>
      <dc:creator>comp_e</dc:creator>
      <dc:date>2009-03-19T12:06:18Z</dc:date>
    </item>
    <item>
      <title>Re: MC9S08QG8: Help getting SPI to work with external EEPROM</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153586#M8589</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;comp-e wrote:&lt;BR /&gt;&lt;P&gt;I did retain control of the CS pin but the SS pin was tied since I didn't have a need for it.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With the SPI configuration you have used, the SS pin function at the MCU &lt;U&gt;does not exist&lt;/U&gt;.&amp;nbsp; That pin will operate as GPIO, so there is no reason for tying anywhere.&amp;nbsp; There is also no reason that the pin could not have been allocated to the CS output line function.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The reason for the ambiguity is that the labels SS and CS are often used to represent the same signal.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;P&gt;... Problem was, when I hooked it up to the logic analyzer the while( ... ) was clearing before the 8 clock tics finished going out.&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;For those instances where a flag is cleared by means of a read process, such as for SPRF, you may find that the debugger is unintentionally clearing the flag because it is reading the appropriate registers during the monitoring process, during single stepping.&amp;nbsp; I suspect that this was a possible reason for your problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This can be avoided by not single stepping through the function, but using a break point at the conclusion of the function.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 20 Mar 2009 00:33:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC9S08QG8-Help-getting-SPI-to-work-with-external-EEPROM/m-p/153586#M8589</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-03-20T00:33:31Z</dc:date>
    </item>
  </channel>
</rss>

