Simplified access to Ramtron (Cypress) FM24Vxx F-RAM devices

Dependents:   FM24Vxx_I2CApp

Revision:
1:6a16bddd7222
Parent:
0:fa858f79d48d
Child:
2:bf7d1264d3ff
--- a/FM24Vxx_I2C.h	Sat Mar 23 15:54:01 2013 +0000
+++ b/FM24Vxx_I2C.h	Wed Apr 03 12:51:20 2013 +0000
@@ -23,6 +23,7 @@
 #include <vector>
 
 #include "FM24Vxx_IDs.h"
+#include "FM24Vxx_SN.h"
 #include "Debug.h" // Include mbed header + debug primitives. See DebugLibrary
 
 namespace _FM24VXX_I2C {
@@ -50,9 +51,12 @@
         /** An unique instance of I2C class
          */
         I2C *_i2cInstance;
-        /** Device ID. Used for Sleep mode
+        /** Device ID
          */
         CFM24VXX_IDs *_deviceID;
+        /** Serial number
+         */
+        CFM24VXX_SN *_sn;
     public:
         /** Memory storage mode
          */
@@ -83,8 +87,15 @@
 
         /** Used to return the unique device identifier
          */
-        inline const CFM24VXX_IDs * GetDevideID() { return (const CFM24VXX_IDs *)_deviceID; };
+        inline const CFM24VXX_IDs * GetDeviceID() { return (const CFM24VXX_IDs *)_deviceID; };
 
+        /** 
+         * Used to return the serial number
+         * Note This functionality is available only for the FM24VN10. In other case, it will return 0xff
+         * @remark See FM24V10_ds.pdf Page 10/16 Clause Unique Serial Number (FM24VN10 only)
+         */
+        inline const CFM24VXX_SN * GetSerialNumber() { return (const CFM24VXX_SN *)_sn; };
+        
         /**
          * Used to swith high speed mode
          * @param highSpeedMode Set to true to switch to high speed mode
@@ -99,7 +110,7 @@
         inline void EnterSleepMode() { /* FIXME To be done */ };
 
         /**
-         * Used to enter in sleep mode
+         * Used to leave sleep mode
          * @remark See FM24V10_ds.pdf Page 8/16 Clause Sleep Mode
          */
         inline void LeaveSpeedMode() { /* FIXME To be done */ };
@@ -109,7 +120,7 @@
          * @param memoryPage The selected memory page (0 or 1)
          * @remark See FM24V10_ds.pdf Page 3/16 Clause Memory Architecture
         */
-        inline void SelectMemoryPage(const unsigned char memoryPage) { _slaveAddress |= ((memoryPage & 0x01) << 1) | 0xa0; };
+        inline void SelectMemoryPage(const unsigned char memoryPage) { _slaveAddress |= ((memoryPage & 0x01) << 1); };
 
         /** Erase of memory area starting at the specified address, using the specified pattern to fill the memory area
          *
@@ -338,12 +349,28 @@
         std::string _internalId;
 
     private:
-        /**
-         * Retrieve device identifiers
+
+        /** Retrieve device identifiers
          * @remark See FM24V10_ds.pdf Page 9/16 Clause Device ID
          */
-        void GetDevideIDs();
+        bool GetDevideIDs();
     
+        /** 
+         * Used to return the serial number
+         * Note This functionality is available only for the FM24VN10. In other case, it will return 0xff
+         * @remark See FM24V10_ds.pdf Page 10/16 Clause Unique Serial Number (FM24VN10 only)
+         */
+        bool GetSerialNumbers();
+        
+        /**
+         * Function to Calculate CRC
+         * @param pdatas The read Serial Number
+         * @param length The number of bytes in the pdatas array. Default: 7 bytes length
+         * @return The 8-bits length checksum
+         * @see See FM24V10_ds.pdf Page 10/16 Clause Unique Serial Number (FM24VN10 only)
+         */
+        unsigned char ChecksumSN(const unsigned char *pdatas, const unsigned int length = 7);
+
     }; // End of class CFM24VXX_I2C
 
 }; // End of namespace _FM24VXX_I2C