|
7.26. Read Unique ID (4BH) The Read Unique ID command accesses afactory-set read-only 128bit number that is unique to each device. The UniqueID can be used in conjunction with user software methods to help preventcopying or cloning of a system. The Read Unique IDcommand sequence: CS# goes low à sending Read Unique ID command à 3-Byte Address (000000H) àDummy Byteà128bit Unique ID Out àCS# goes high. 7.26.读取唯一ID (4BH) 读取唯一ID命令访问一个工厂设置的只读128位数字,该对每个设备都是唯一的。唯一ID可以与用户软件方法结合使用,以帮助防止系统的复制或克隆。
读取唯一ID命令序列:CS#变低 à 发送读取唯一ID命令 à 3字节地址 (000000H)à 假字节à 128位唯一ID输出à CS#变高。
这个4BH 命令,有使用价值: 我觉得可以这样写:赶紧写下来,一会儿就忘了这事儿!
#define SFC_WREN 0x06 #define SFC_RearWYID 0x4B //PM25LV040 读取唯一ID命令访问一个工厂设置的只读128位数字
//------------------------------------------------------------------------- #define SPI_CE_High() P_PM25LV040_CE = 1 // set CE high #define SPI_CE_Low() P_PM25LV040_CE = 0 // clear CE low #define SPI_Hold() P_SPI_Hold = 0 // clear Hold pin #define SPI_UnHold() P_SPI_Hold = 1 // set Hold pin #define SPI_WP() P_SPI_WP = 0 // clear WP pin
#define SPI_UnWP() P_SPI_WP = 1 // set WP pin //--------------------------------------------------------------------------- u32 PM25LV040_ID0, PM25LV040_ID1, PM25LV040_ID2,PM25LV040_ID3; /************************************************ 使能Flash写命令 入口参数: 无 出口参数: 无 ************************************************/ void FlashWriteEnable(void) //写能使 { while(CheckFlashBusy() > 0); //Flash忙检测,读取回来的数大于0表示忙碌,就一直在这里等待 //返回值的最低位表示忙碌,是1的话,肯定整个数大于0 SPI_CE_Low(); SPI_WriteByte(SFC_WREN); //发送写使能命令 SPI_CE_High(); }
/************************************************************************/ void SPI_WriteByte(u8 out) //向芯片写入1个8位数 { SPDAT = out; while(SPIF == 0) ; SPIF = 1; //清SPIF标志 WCOL = 1; //清WCOL标志
}
我觉得不需要调用写使能函数,所以先屏蔽,不行再放出来
/************************************************ 读取Flash唯一ID 入口参数: 无 出口参数: 无 ************************************************/
void FlashCheckID(void) //读取芯片唯一ID { SPI_CE_Low(); //FlashWriteEnable(); //写能使
SPI_WriteByte(SFC_RearWYID); //发送读取ID命令 SPI_WriteByte(0x00); //空读3个字节 SPI_WriteByte(0x00); SPI_WriteByte(0x00); PM25LV040_ID0 = SPI_ReadByte(); //读取唯一ID第一个32位数 PM25LV040_ID1 = SPI_ReadByte(); //读取唯一ID第二个32位数 PM25LV040_ID2 = SPI_ReadByte(); //读取唯一ID第三个32位数 PM25LV040_ID3 = SPI_ReadByte(); //读取唯一ID第四个32位数
SPI_CE_High(); }
|