本文开始介绍加密芯片SMEC98SP的功能使用。
1、读取ID号
读取ID号在加密过程中不一定有用,当然可以当作 一个系列号加入到加密过程中。但是读取ID号可以测试主控芯片与加密芯片之间的IIC通讯联系是否正确。
首先,在加密芯片端加入如下程序。在SMEC98SP_Demo V21文件夹中打开工程目录,SMEC98SP_I2C_Test.uvproj用keil UV4打开,SMEC98SP_I2C_Test.Uv2用keil UV2打开。
在C_ROOT.C文件的void i2c_CommandProc(void)函数添加如下:
//-----------------------------
//取芯片序列号 CMD = 83 00 00 P3
//-----------------------------
case 0x83:
if(I2C_P3 != 0x0C || I2C_P1 || I2C_P2)
{
I2C_Buf[0] = 0x6A;
I2C_Buf[1] = 0x86;
return;
}
Tmp_I2C_send_bytes=I2C_P3;
GetChipID(&I2C_Buf[2]);
I2C_Buf[0] = 0x90;
I2C_Buf[1] = 0x00;
I2C_send_bytes=Tmp_I2C_send_bytes+2;
break;
编译成功后,通过烧录器烧录到加密芯片中。用软件测试一下
测试成功了,说明加密芯片这边的程序做好了。
下面是主控芯片端的程序,以8051单片机为例
//读12字节UID,返回:90 00 UID1 UID2 UID3.....UID12
unsigned char Read_UID(unsigned char * UID)
{
uchar ret;
uchar iic_addr;
uchar len;
iic_addr = 0x00;
iic_buff[0] = 0x83;
iic_buff[1] = 0x00;
iic_buff[2] = 0x00;
iic_buff[3] = 0x0c; //一共是0x0c个字节
len = iic_buff[3];
ret = IIC_WriteWithAddr(iic_addr & 0xFE, iic_buff, 4);
if(ret)//出错
{
return 1;
}
// delay_nms(1);
ret = IIC_ReadWithAddr(iic_addr | 0x1, UID, (len+2));
if(ret)
{
return 1;
}
return 0; //读取成功
}
读取成功后,UID缓存中有一串数据:90003275170CB1890FDF16557926
9000是状态字,表示操作成功,3275170CB1890FDF16557926是ID号了。
IIC驱动看具体是什么型号单片机,如有不明,加QQ: 47583353
深圳市中巨伟业信息科技有限公司
地址:深圳市南山区蛇口太子路18号海景广场10楼E单元
邮编:518067
电话:0755-86636183
传真:0755-86636121