Skip to content

Commit e808f55

Browse files
committed
Merge pull request #68 from apullin/dfmem_unique_id
dfmem unique ID
2 parents 77fca43 + eca5d75 commit e808f55

File tree

10 files changed

+51
-9
lines changed

10 files changed

+51
-9
lines changed

dfmem.c

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
#include <stdlib.h>
5858
#include <string.h>
5959

60-
#include "p33Fxxxx.h"
60+
#include <xc.h>
6161
#include "spi.h"
6262
#include "dfmem.h"
6363
#include "spi_controller.h" // For DMA
@@ -162,6 +162,9 @@ union {
162162
unsigned char chr_addr[4];
163163
} MemAddr;
164164

165+
unsigned char userSecRegID[64];
166+
unsigned char factorySecRegID[64];
167+
165168
/*----------------------------------------------------------------------------
166169
* Declaration of private functions
167170
---------------------------------------------------------------------------*/
@@ -172,6 +175,7 @@ static inline void dfmemSelectChip(void);
172175
static inline void dfmemDeselectChip(void);
173176
static void dfmemSetupPeripheral(void);
174177
static void dfmemGeometrySetup(void);
178+
static void dfmemReadSecurityRegister(void);
175179

176180
static void spiCallback(unsigned int irq_source);
177181

@@ -186,6 +190,10 @@ void dfmemSetup(void)
186190
spic2SetCallback(&spiCallback);
187191
while(!dfmemIsReady());
188192
dfmemGeometrySetup();
193+
194+
//Readback security register, which gets chip-unique identifiers
195+
// ID is stored in a static var here, and dfmem has a public getter
196+
dfmemReadSecurityRegister();
189197
}
190198

191199
void dfmemWrite (unsigned char *data, unsigned int length, unsigned int page,
@@ -508,6 +516,12 @@ void dfmemZeroIndex()
508516
nextPage = 0;
509517
}
510518

519+
uint64_t dfmemGetUnqiueID(){
520+
//Grab first 8 bytes of 64-byte factory value
521+
uint64_t id = *((uint64_t*)(factorySecRegID));
522+
return id;
523+
}
524+
511525
/*-----------------------------------------------------------------------------
512526
* Private functions
513527
-----------------------------------------------------------------------------*/
@@ -619,3 +633,27 @@ static void dfmemGeometrySetup(void)
619633
break;
620634
}
621635
}
636+
637+
static void dfmemReadSecurityRegister(void){
638+
639+
int i; // Loop variable, MPLABX is not C99 standard
640+
641+
dfmemSelectChip();
642+
643+
dfmemWriteByte(0x77); //Read security register opcode
644+
dfmemWriteByte(0x77); //Dummy write, 3 bytes required for opcode 0x77
645+
dfmemWriteByte(0x77); //Dummy write, 3 bytes required for opcode 0x77
646+
dfmemWriteByte(0x77); //Dummy write, 3 bytes required for opcode 0x77
647+
648+
//User ID is the first 64 bytes
649+
for(i = 0; i < 64; i++){
650+
userSecRegID[i] = dfmemReadByte();
651+
}
652+
653+
//Factory ID is the second 64 bytes
654+
for(i = 0; i < 64; i++){
655+
factorySecRegID[i] = dfmemReadByte();
656+
}
657+
dfmemDeselectChip();
658+
659+
}

dfmem.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
#ifndef __DFMEM_H
5656
#define __DFMEM_H
5757

58+
#include <stdint.h>
5859

5960
typedef struct {
6061
unsigned int byte_address_bits;
@@ -216,5 +217,8 @@ void dfmemSync();
216217
// This resets the current page and offset tracking variable to zero.
217218
void dfmemZeroIndex();
218219

220+
//Get the factory programmed unique identifier, which is the first 8 bytes
221+
// of a 64-byte array
222+
uint64_t dfmemGetUnqiueID();
219223

220224
#endif // __DFMEM_H

init_default.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
*
4040
*/
4141

42-
#include "p33Fxxxx.h"
42+
#include <xc.h>
4343
#include "adc.h"
4444

4545

ovcam.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
* - Uses an I2C(SCCB) port for configuring the camera.
4141
*/
4242

43-
#include "p33Fxxxx.h"
43+
#include <xc.h>
4444
#include "i2c.h"
4545
#include "ovcam.h"
4646
#include "utils.h"

ovcam.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
#define __OVCAM_H
6060

6161

62-
#include "p33Fxxxx.h"
62+
#include <xc.h>
6363

6464

6565
// OVCAM Pins

packet_queue.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*
4141
*/
4242

43-
#include "p33Fxxxx.h"
43+
#include <xc.h>
4444
#include "queue.h"
4545
#include "packet_queue.h"
4646
#include "radio.h"

payload_queue.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#include "queue.h"
4444
#include "payload_queue.h"
4545
#include "payload.h"
46-
#include "p33Fxxxx.h"
46+
#include <xc.h>
4747
#include <stdio.h> // for NULL
4848
#include <stdlib.h> // for malloc
4949

progmem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
*
4444
*/
4545

46-
#include "p33Fxxxx.h"
46+
#include <xc.h>
4747
#include "progmem.h"
4848

4949
//#include "lcd.h"

queue.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
#include "queue.h"
4444
#include "utils.h"
45-
#include "p33Fxxxx.h"
45+
#include <xc.h>
4646
#include <stdio.h> // for NULL
4747
#include <stdlib.h> // for malloc
4848

utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#define __UTILS_H
4545

4646

47-
#include "p33Fxxxx.h"
47+
#include <xc.h>
4848

4949
// Abstracting LEDs for easier control of their status
5050
#if defined(__IMAGEPROC1)

0 commit comments

Comments
 (0)