- 每次使用upload/dnload之前都需要先发送一次set_mta指令,因为使用完upload/dnload之后,mta0指针会根据upload/dnload指令里size的大小自动增加,因此必须重新设置set_mta
![ccp指令调试过程](https://img-blog.csdnimg.cn/2021031817305315.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI2ODA2ODc=,size_16,color_FFFFFF,t_70)
- upload/dnload指令一次只能读取最多5个字节(byte)
- 由于底层代码未定义CCP_STANDARD,所以使用down命令并不会返回增长后的MTA0指针
case CC_DNLOAD:
{
CCP_BYTE r;
#define size com[2]
#ifdef CCP_SEED_KEY
if (!(ccp.ProtectionStatus&PL_CAL)) {
ccp.Crm[1] = CRC_ACCESS_DENIED;
r = 0;
}
else
#endif
r = ccpWriteMTA(0,size,&com[3]);
#ifdef CCP_STANDARD
ccpGetMTA0((CCP_BYTE*)&ccp.Crm[3],(CCP_DWORD*)&ccp.Crm[4]);
#endif
if (r==CCP_WRITE_PENDING) return;
if (r==CCP_WRITE_DENIED||r==CCP_WRITE_ERROR) ccp.Crm[1] = CRC_ACCESS_DENIED;
#ifdef CCP_TESTMODE
if (gDebugLevel) {
int i;
CCPPRINT("%u: DNLOAD n=%u, ",ctr,size);
for (i=3;i<3+size&&i<8;i++) CCPPRINT("%02X ",com[i]);
CCPPRINT("\n");
}
#endif
#undef size
}
break;
- set_mta/upload/dnload指令不能和short_up同时使用,必须重新connect,否则会出错
- short_up指令不会改变mta0指针