|
发表于 2013-8-23 15:03:36
|
显示全部楼层
一般我是这么做的,可以参考。 具体需要自己看用户手册JTAG那一章节。
#define IAP_LOCATION *(volatile unsigned int *)(0x10400100);// 根据你实际的片子定义地址
uint32_t command[6];
uint32_t result[5];
typedef void (*IAP)(uint32_t [],uint32_t[]);
#define IAP_INIT 49
#define IAP_PRESECTOR2WRITE 50
#define IAP_COPYRAM2FLASH 51
#define IAP_ERASESECTOR 52
#define IAP_BLACKCHECKSECTOR 53
#define IAP_READPARTID 54
#define IAP_READBOOTCV 55
#define IAP_READDEVICESERIALNUM 58
#define IAP_COMPARE 56
#define IAP_REINVOKEISP 57
#define IAP_ERASEPAGE 59
#define IAP_SETACTIVEBOOTFLASHBACK 60
uint8_t* lpc18xx_iap_readbootcode(void)
{
IAP iap_entry = (IAP)IAP_LOCATION;
memset(command, 0x00, sizeof(command));
command[0] = IAP_READBOOTCV;
iap_entry (command, result);
DEBUGOUT("IAP boot coade 0x%x, 0x%x .\r\n", result[0], result[1]);
}
uint8_t* lpc18xx_iap_readpartid(void)
{
IAP iap_entry = (IAP)IAP_LOCATION;
memset(command, 0x00, sizeof(command));
command[0] = IAP_READPARTID;
iap_entry (command, result);
DEBUGOUT("IAP Part Id is 0x%x, 0x%x .\r\n", result[0], result[1]);
}
uint8_t* lpc18xx_iap_readserialnum(void)
{
IAP iap_entry = (IAP)IAP_LOCATION;
memset(command, 0x00, sizeof(command));
command[0] = IAP_READDEVICESERIALNUM;
iap_entry (command, result);
DEBUGOUT("IAP Serial is 0x%d, 0x%u, 0x%u, 0x%u, 0x%u .\r\n", result[0], result[1], result[2], result[3], result[4]);
} |
|