FM25C256
The FM24C256 library is a library that uses a RAMTRON SPI serial EEPROM.
Ramtron memory chips are as quick as RAM and can be overwritten almost unlimited times.
An external EEPROM is a safe alternative to the internal EEPROM. You can also increase the size of the EEPROM this way.
By using : $lib "fm25c256.lib"
The EEPROM read and write routines from the library will be used instead of the internal EEPROM.
Thus you can still use : Dim BE as ERAM Byte
And you can use READEEPROM and WRITEEEPROM, but instead of using the internal EEPROM, the external I2C EEPROM is used.
The lib is for the FM25C256. It uses SPI
For the SPI you have to define the pins. The pin named fram_so is connected to SO of the FRAM. SI is connected to SI.
A sample is shown below. The clock and, cs and SI pins need to be configured as output pins.
Fram_cs Alias Portl.7 : Const Fram_csp = 7 : Const Fram_csport = Portl
Fram_so Alias Pind.1 : Const Fram_sop = 1 : Const Fram_soport = Pind
Fram_si Alias Portd.0 : Const Fram_sip = 0 : Const Fram_siport = Portd
Fram_sck Alias Portl.6 : Const Fram_sckp = 6 : Const Fram_sckport = Portl
This library is only included in the full version. It is not included with the DEMO.
Example
'----------------------------------------------------------------------------------------- 'name : 25C256 simple RW test.bas 'copyright : (c) 1995-2013, MCS Electronics 'purpose : Testing Read/Write operation with external EEPROM 'micro : Mega8535 'suited for demo : no 'commercial addon needed : no '----------------------------------------------------------------------------------------- $regfile = "m8535.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 64 ' default use 32 for the hardware stack $swstack = 20 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space ' External EEPROM Config Config Portb.4 = Output Config Portb.7 = Output Config Portb.5 = Output Fram_cs Alias Portb.4 : Const Fram_csp = 4 : Const Fram_csport = Portb Fram_so Alias Pinb.6 : Const Fram_sop = 6 : Const Fram_soport = Pinb Fram_si Alias Portb.5 : Const Fram_sip = 5 : Const Fram_siport = Portb Fram_sck Alias Portb.7 : Const Fram_sckp = 7 : Const Fram_sckport = Portb $eepromsize = &H8000 $lib "fm25c256.lib" Dim A(101) As Eram Byte Dim B As Byte Dim C As Byte Dim D As Byte Do Input "Data to write ? (0-255)" , D Print "Reading content of EEPROM (via ERAM Byte)" For C = 0 To 100 B = A(c) Print "Read " ; C ; ":" ; B ; "/" ; Hex(b) Waitms 4 Next Wait 1 Print "Writing data to EEPROM (via ERAM Byte)" For C = 0 To 100 A(c) = D Print "Write " ; C ; ":" ; D ; "/" ; Hex(d) Waitms 4 Next Wait 1 Print "Reading back data from EEPROM (via ERAM Byte)" For C = 0 To 100 B = A(c) Print "Read " ; C ; ":" ; B ; "/" ; Hex(b) Waitms 4 Next Wait 2 Input "Data to write ? (0-255)" , D Print "Reading content of EEPROM (via READEEPROM)" For C = 0 To 100 Readeeprom B , C Print "Read " ; C ; ":" ; B ; "/" ; Hex(b) Waitms 4 Next Wait 1 Print "Writing data to EEPROM (via WRITEEEPROM)" For C = 0 To 100 Writeeeprom D , C Print "Writing " ; C ; ":" ; D ; "/" ; Hex(d) Waitms 4 Next Wait 1 Print "Reading content of EEPROM (via READEEPROM)" For C = 0 To 100 Readeeprom B , C Print "Read " ; C ; ":" ; B ; "/" ; Hex(b) Waitms 4 Next Wait 2 Loop End '-------------------------------------------------------------------------------
'------------------------------------------------------------------------------- Example 2, shared bus ' Using the FM25C256 library ' The FM25C256 library uses the CYPRESS FM25W256 chip (before named FM25C256 by Ramtron) ' This chip is based in FRAM technology, which makes it much faster than an EEPROM and has a much ' longer life (100.000.000.000.000 read/writes) ' To give an idea of speed, writting a byte to an XMEGA192A3 internal EEPROM takes more than 10580us ' while writing a byte to the FM25W256 chip using the FM25C256 library takes 32,5us in this example; ' this is more than 325 times faster. ' NOTES: ' - This library allows you to use an external EEPROM INSTEAD of the internal EEPROM (you cannot use both) ' - Do not use the "Config Eeprom = " command when using this library ' - The FM25C256 library uses software SPI; therefore, if you need to share the SPI bus with another chip ' that uses HW SPI, you must: ' - Configure the HW SPI normally (with the "Config SpiX =" command in XMEGA chips) as needed for ' the other chip ' - Disable HW SPI before reading or writing to EEPROM, and enable it after. ' In this example, there are two chips connected to the SPIC bus of an XMEGA192A3, an accelerometer BMA180 ' and the FM25W256 FRAM chip. ' The HW SPIC of the XMEGA192A3 is configured at the beginning to allow for the BMA180 to be read while the ' FM25W256 is not used. '____________________________________________________________________________________ $regfile = "xm192a3def.dat" $hwstack = 256 $swstack = 256 $framesize = 256 '____________________________________________________________________________________ ' For 16MHz crystal Config Osc = Disabled , Extosc = Enabled , Range = 12mhz_16mhz , Startup = Xtal_1kclk , 32khzosc = Enabled ' Set PLL OSC conditions: Osc_pllctrl = &B1100_0010 ' Reference external oscillator, set the PLL' multiplication factor to 2 (bits 0 - 4) Set Osc_ctrl.4 ' Enable PLL Oscillator Bitwait Osc_status.4 , Set ' wait until the pll clock reference source is stable Clk_ctrl = &B0000_0100 ' switch system clock to pll ' Prescale Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1 $crystal = 32000000 '____________________________ Const Fclock = 32000000 '____________________________________________________________________________________ 'Config Eeprom = Mapped ' Do not put this command when using an external EEPROM '____________________________________________________________________________________ Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled , Hi = Enabled Enable Interrupts '================================ COM1 (C2 C3) C0 ================================== ' COM1 RS232_1 Config Com1 = 230400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Config Serialin = Buffered , Size = 254 Config Serialout = Buffered , Size = 254 Open "COM1:" For Binary As #1 '================================== SPIC for FRAM ================================ ' External EEPROM Config Fram_cs Alias Porta.7 : Const Fram_csp = 7 : Const Fram_csport = Porta : Config Porta.7 = Output Fram_si Alias Portc.5 : Const Fram_sip = 5 : Const Fram_siport = Portc : Config Portc.5 = Output Fram_sck Alias Portc.7 : Const Fram_sckp = 7 : Const Fram_sckport = Portc : Config Portc.7 = Output Fram_so Alias Port.6 : Const Fram_sop = 6 : Const Fram_soport = Pinc $eepromsize = &H32000 ' Size, in bytes, of the FM25W256 memory '____________________________________________________________________________________ $lib "fm25c256.lib" ' 'NOTE: 'While using the lib, the hardware SPI should be disabled. you can do this by writing to the SPIx_CTRL register ' SPIC_CTRL.6=0 'disable SPI 'Then use the eeprom commands, and re-enable the SPI after that : SPIC_CTRL.6=1 'Also notice that clock level must be low at entrance for FM25W256 ' Fram_sck = 0 ' Need to put this before accesing the chip 'eprom commands here ' Before re-enable hw spi, set clock pin to high, and enabe with spic_ctrl.6=1 '____________________________________________________________________________________ ' Configure HW SPIC to use a BMA180 Config Spic = Hard , Master = Yes , Mode = 3 , Clockdiv = Clk8 , Data_order = Msb , Ss = None ' Open device Open "SPIC" For Binary As #10 Bma_ss Alias Portc.4 : Config Portc.4 = Output : Bma_ss = 1 ' /SS del bma180 '____________________________________________________________________________________ Dim Dwtemp_ee As Eram Dword Dim Dwtemp As Dword Dim N As Byte N = 0 Dim I As Byte Dim Acel_x As Integer '____________________________________________________________________________________ Do ' ------------------------ Incr N ' ------------------------ ' Disable HW SPi before writing to EEPROM FM25W256 Spic_ctrl.6 = 0 Fram_sck = 0 ' Clock level must be low at entrance for fm25256 ' Write to EEPROM FM25W256 Dwtemp = N ' Convert Byte to Dword. When writing to EEPROM variables must be of the same type Dwtemp_ee = Dwtemp ' This takes 51,1us ' Read from EEPROM FM25W256 Dwtemp = Dwtemp_ee ' This takes 42,2us ' Enable HW SPI. It must be done with SCK high Fram_sck = 1 Spic_ctrl.6 = 1 ' Enable HW SPI ' ------------------------ ' Show value stored and then retrieved from EEPROM Print #1 , N ; ":" ; Dwtemp ; " "; ' ------------------------ Gosub Read_bma_x Print #1 , Acel_x ; "mG" ' ------------------------ Waitms 500 ' ------------------------ Loop '____________________________________________________________________________________ ' READ THE BMA180 X AXIS ACCELERATION '____________________________________________________________________________________ Dim Bma_adr_byte As Byte Dim Spi_byte As Byte Dim Msb_itemp As Integer Dim Lsb_itemp As Integer ' Dim Aceleracion_tmp As Integer Const Acc_x_msb = &H3 Const Acc_x_lsb = &H2 '____________________________________________________________________________________ Read_bma_x: '_________________________ Read Acel_X_LSB Bma_ss = 0 Bma_adr_byte = Acc_x_lsb ' X_LSB Bma_adr_byte.7 = 1 ' Read command Print #10 , Bma_adr_byte ' Send address Input #10 , Spi_byte ' Read spibyte= | d5 d4 d3 d2 d1 d0 | 0 | 1 | Bma_ss = 1 ' De-select BMA 180 Shift Spi_byte , Right , 2 Lsb_itemp = Spi_byte '_________________________ Read Acel_X_MSB Bma_ss = 0 Bma_adr_byte = Acc_x_msb ' X_MSB Bma_adr_byte.7 = 1 ' Read command Print #10 , Bma_adr_byte ' Send address Input #10 , Spi_byte ' Read spibyte= |d13 d12 d11 d10 d9 d8 d7 d6 | Bma_ss = 1 ' De-select BMA180 Msb_itemp = Spi_byte Shift Msb_itemp , Left , 6 Lsb_itemp = Lsb_itemp Or Msb_itemp Lsb_itemp.14 = Spi_byte.7 Lsb_itemp.15 = Spi_byte.7 Acel_x = Lsb_itemp Return '____________________________________________________________________________________ End
Languages | English • Deutsch |
---|