Chapter 7 Synchronous Serial - PowerPoint PPT Presentation

About This Presentation
Title:

Chapter 7 Synchronous Serial

Description:

Synchronous Serial SPI and I2C interfaces Di Jasio Programming 16-bit Microcontrollers in C (Second Edition) Checklist The following tools will be used in this ... – PowerPoint PPT presentation

Number of Views:88
Avg rating:3.0/5.0
Slides: 34
Provided by: LucioD4
Category:

less

Transcript and Presenter's Notes

Title: Chapter 7 Synchronous Serial


1
Chapter 7 Synchronous Serial
  • SPI and I2C interfaces

2
Checklist
  • The following tools will be used in this lesson
  • MPLAB X, Integrated Development Environment
    (v1.8 or later, free)
  • MPLAB XC16, C compiler (v1.11 or later, free)
  • The following pieces of documentation will be
    used during this lesson
  • PIC24FJ128GA010 Datasheet DS39747 (latest rev.)
  • Make sure they are available and/or installed and
    ready to use on your computer.
  • You can download them from Microchip web site at
    http//www.microchip.com/mplabx
  • And http//www.microchip.com/xc16
  • The following hardware tools are recommended
  • Explorer 16 Demonstration Board
  • PIC24FJ128GA010 PIM
  • 24LC00 or similar Serial EEPROM
  • 2 x 4.5K Ohm resistors

3
Synchronous Serial Interfaces
  • I2C
  • SPI

4
SPI Bus
5
Asynchronous Serial Interface
6
Comparison of Serial Interfaces
7
The SPI module
8
SPIxCON register
9
Initializing SPI2
  • Pin 12 of PORTD is connected to the memory chip
    select (CS)
  • define CSEE _RD12 // select line for
    Serial EEPROM
  • define TCSEE _TRISD12 // tris control for
    CSEE pin
  • Peripheral initialization
  • // 1. init the SPI peripheral
  • TCSEE 0 // make SSEE pin
    output
  • CSEE 1 // de-select the
    Serial EEPROM
  • SPI2CON1 SPI_MASTER // select mode
  • SPI2STAT SPI_ENABLE // enable the
    peripheral
  • Where
  • define SPI_MASTER 0x0120 // 8-bit master mode,
    CKE1, CKP 0
  • define SPI_ENABLE 0x8000 // enable SPI port,
    clear status
  • A small function that will be used to transfer
    data to and from the serial EEPROM device
  • // send one byte of data and receive one back at
    the same time
  • int WriteSPI2( int data)
  • SPI2BUF data // write to
    buffer for TX

10
The 25LC256 Serial EEPROM
  • // 25LC256 Serial EEPROM commands
  • define SEE_WRSR 1 // write status
    register
  • define SEE_WRITE 2 // write command
  • define SEE_READ 3 // read command
  • define SEE_WDI 4 // write disable
  • define SEE_STAT 5 // read status
    register
  • define SEE_WEN 6 // write enable

11
25LC256 Status Register
// 2. Check the Serial EEPROM status
CSEE 0 // select the Serial
EEPROM writeSPI2( SEE_STAT) // send a
READ STATUS COMMAND i writeSPI2( 0)
// send/receive CSEE 1
// deselect, terminate command
// 2.1 send a Write Enable command CSEE
0 // select the Serial EEPROM
WriteSPI2( SEE_WEN) // write enable
command CSEE 1 //
deselect, terminate command
12
Writing to the EEPROM
// send a Write command CSEE 0
// select the Serial EEPROM WriteSPI2(
SEE_WRITE) // write command WriteSPI2(
addr_MSB) // address MSB first
WriteSPI2( addr_LSB) // address LSB (word
aligned) WriteSPI2( data) // send
8-bit of data // continue writing more data
CSEE 1
// wait until any work in progress is completed
while ( ReadSR() 0x1) // check the WIP
flag
13
Reading from the EEPROM
// perform a read sequence CSEE 0
// select the Serial EEPROM WriteSPI2(
SEE_READ) // read command WriteSPI2(
addr_MSB) // address MSB first WriteSPI2(
addr_LSB) // address LSB (word aligned)
data WriteSPI2( 0) // send dummy, read msb
// continue reading a second byte, a third
CSEE 1
14
I2C Interface Examples
  • A few examples of devices using the I2C interface
  • 1Mbit Serial EEPROMS 24xx1025
  • 18-bit delta sigma ADCs MCP3421
  • 16-bit delta sigma ADCs MCP3425
  • 12-bit SAR ADCsMCP3221
  • 12-bit D/A MCP4725
  • Integrated Temperature Sensor (/-0.5C) MCP9803
  • I/O Expander 8/16-bit MCP23016/MCP2308
  • Consider additionally
  • Battery gauges
  • Audio codecs
  • GPS receivers
  • LCD displays controllers
  • Card readers

15
Application Specific Protocols
  • Examples of application specific protocols based
    on the I2C interface are
  • SMBus, the System Management Bus, used in
    personal computers (and servers) for low speed
    system management applications
  • IPMI, the Intelligent Platform Management
    Interface, used to monitor the system health and
    manage systems (mostly servers) remotely.
  • PMBus, the Power Management Bus, used by
    advanced digitally controlled power supply units
    to monitor, configure and control power.

16
I2C Data Transfer Rules
  • Two simple rules dictate how to operate from
    here
  • When the SCL line is low, and only at this time,
    the SDA line can change.
  • When the SCL line is high, the SDA line status
    indicates the value of a bit.
  • Two exceptions to rule 1 create special
    conditions that are used to delimit the beginning
    and end of each transaction between two devices
    on the bus. When SCL is high
  • A START condition is indicated by the SDA line
    changing from high to low
  • A STOP condition is indicated by the SDA line
    changing from low to high

17
The 24LC00 Serial EEPROM
  • I2C has been for years the favorite choice for
    serial EEPROM users and manufacturers for two
    reasons
  • Only two pins (I/Os) are required to communicate
    with the device, enabling the embedded control
    designer to use very low pin count (inexpensive)
    microcontrollers.
  • Just four pads (areas of contacts on the chip)
    are required for a Serial EEPROM device. Two
    provide the power supply and the remaining two
    are the I2C lines. This reduces the silicon area
    overhead due to the contacts on a typically very
    small device -- hence the high impact/cost of the
    pads.
  • In practice most I2C serial EEPROMs have at least
    a fifth contact/pin (WP) to protect the device
    contents by disabling writing.

18
Talking to the Serial EEPROM
19
The SEE Grammar
  • Using the following simple notation
  • S START sequence
  • P STOP sequence
  • A/N Acknowledge bit
  • 0xXX data byte (hex notation)
  • 0bXXXXXXXX data byte (in binary notation)
  • and using brackets () to indicate parts of the
    conversation produced by a slave we can represent
    a typical I2C protocol message in a compact
    notation
  • Here is an example of a read command sequence for
    a 24LC00 (128 bit) SEE
  • S 0b01010001 (A) (Data) NP

20
A Write Example
  • S 0b01010000 (A) ByteAddress (A) Data (A) P

21
I2CxCON register
22
Initializing the I2C module
  • void InitSEE( long fcy)
  • // fcy processor operating frequency in Hz
    (system clock)
  • // Configure I2C for 7 bit address mode 100kHz
  •  
  • OpenI2C1( I2C_ON I2C_IDLE_CON
    I2C_7BIT_ADD I2C_STR_EN
  • I2C_GCALL_DIS I2C_SM_DIS
    I2C_IPMI_DIS,
  • (fcy /(2BUS_FRQ))-1)
  • IdleI2C1()
  • T1CON0x8030
  • TMR10
  • while( TMR1lt 100)
  • //InitSEE

23
Sending the Address
  • int addressSEE( long add)
  • // send the address selection command
  • // repeat if SEE busy
  • int cmd
  •  
  • // 1. Form SEE command address msb (3)
  • cmd 0xA0((addgtgt7)0xE)
  •  
  • // 2. WRITE(!) the Address msb
  • // try send command and repeat until ACK is
    received
  • while( 1)
  • StartI2C1()
  • IdleI2C1()
  •  
  • // send command and address msb(3)
  • MasterWriteI2C1( cmdWRITE_CMD)
  • IdleI2C1()

24
Logic Analyzer Capture
25
Writing a 16-bit value
S 0b01010000 (A) ByteAddress (A) DataLSB (A)
DataMSB (A) P
  • void iWriteSEE( long add, int v)
  • // SEE write command sequence
  • int cmd
  •  
  • // 1. select address
  • cmd AddressSEE( add)
  •  
  • // 2. stream data out
  • MasterWriteI2C1( v0xFF)
  • IdleI2C1()
  •  
  • MasterWriteI2C1( vgtgt8)
  • IdleI2C1()
  •  
  • // 3. terminate the command sequence
  • StopI2C1()
  • IdleI2C1()
  •  

26
Reading a 16-bit value
Address Selection
S 0b01010000 (A) ByteAddress(A) PS 0b01010001
(A) (DataLSB) A (Data MSB) NP
  • int iReadSEE( long add)
  • // random access read command sequence
  • int cmd, r
  •  
  • // 1. select address
  • cmd AddressSEE( add)
  •  
  • StopI2C1()
  • IdleI2C1()
  •  
  • // 2. read command
  • StartI2C1() IdleI2C1()
  • MasterWriteI2C1( cmdREAD_CMD)
  • IdleI2C1()
  •  
  • // 3. stream data in (will continue until
    NACK is sent)
  • r MasterReadI2C1( )
  •  

Data Read
27
I2C Serial EEPROM Summary
28
Notes for the PIC MCU Experts
  • In addition to the SPI options available on most
    PIC microcontroller (offered by the SSP and MSSP
    modules), such as
  • Selectable clock polarity
  • Selectable clock edge
  • Master or Slave mode operation
  • The PIC24 SPI interface module adds several new
    capabilities, including
  • A 16-bit transfer mode
  • Data input sampling phase selection
  • Framed transmission mode
  • Frame synch pulse control (polarity and edge
    selectable)
  • Enhanced Mode (8 deep transmit and receive FIFOs)
  • Using the new Enhanced Mode, with 8 levels deep
    FIFOs , up to 8 words of data (16 bytes) can be
    written or retrieved from the SPI buffers in
    short bursts, leaving more time to the CPU to
    process the data in between.

29
Tips and Tricks
  • Safety measures suggested to reduce the risk of
    SEE data corruption
  • Ensure adequate power supply decoupling (a
    capacitor) is provided close to the memory
    device.
  • A pull up resistor (10k Ohm) is provided on the
    Chip Select line, to avoid floating during the
    microcontroller power up and reset.
  • An additional pull down resistor (10k Ohm) can be
    provided on the SCK clock line to avoid clocking
    of the peripheral during boundary scan and other
    board testing procedures.
  • Verify clean and fast power-up and down slope are
    provided to the microcontroller to guarantee
    reliable Power On Reset operation. If necessary
    add an external voltage supervisor (see MCP809
    devices for example).

30
Tips and Tricks
  • A number of software methods can be employed to
    prevent a program bug might trigger the write
    routine
  • Avoid reading and especially updating the NVM
    content right after power up. Allow a few
    milliseconds for the power supply to stabilize
    (application dependent).
  • Add a software write-enable flag, and demand that
    the calling application set the flag before
    calling the write routine, possibly after
    verifying some essential application specific
    entry condition.
  • Add a stack level counter each function in the
    stack of calls implemented by the library should
    increments the counter upon entry and decrement
    it on exit. The write routine should refuse to
    perform if the counter is not at the expected
    level.
  • Some refuse to use the NVM memory locations
    corresponding to the first address (0x0000)
    and/or the last address (0xffff) believing they
    could be more likely to be the subject to
    corruption.
  • Store two copies of each essential piece of data,
    performing two separate calls to the write
    routine. If each copy contains even a simple
    checksum, it will be easy, when reading it back,
    to discard the corrupted one and recover.

31
Suggested Excercises
  • Several functions in the library are performing
    locking loops that could reduce the overall
    application performance. By utilizing the SPI
    port interrupts implement a non blocking version
    of the library.
  • Enable the new SPI 16-bit mode to accelerate
    basic read and write operation.
  • Develop (circular) buffered versions of the read
    and write functions.

32
Recommended Readings
  • Eady, F. (2004), Networking and Internetworking
    with Microcontrollers, Newnes, Burlinghton, MA
  • An entertaining introduction to serial
    communication in embedded control.

33
Online Resources
  • Total Endurance Software
  • http//www.microchip.com/totalendurance
  • This tool will help you estimate the endurance to
    expect from a given NVM device in your actual
    application conditions. It will give you an
    indication of the total number of e/w cycles or
    the number of expected years of your application
    life before a certain target failure-rate is
    reached.
Write a Comment
User Comments (0)
About PowerShow.com