1. 问题:根据WCH其它型号芯片的经验,CHIP_ID应该返回CH5XX的后两位,这里应该为55。
实测:读取CHIP_ID寄存器,得到的是56。
2. 问题:CH555芯片资料显示,ROM_STATUS寄存器在Flash操作成功后应该返回0xC0。
实测:以4 字节为单位读取ReadOnly 只读信息区域,操作成功后ROM_STATUS返回的是0x00。
// 测试代码 ROM_ADDR_L = 0x10; // 读芯片唯一ID码 ROM_ADDR_H = 0x00; ROM_CTRL = 0x8D; if (ROM_STATUS) // 检查操作结果(这里读取成功会返回0x00) { return ROM_STATUS; // 返回错误代码 }
3. 问题:CH555芯片资料显示,ROM_STATUS寄存器在Flash操作成功后应该返回0xC0。
实测:单字节写flash-ROM,操作成功后ROM_STATUS返回的是0x40。
注意:单字节写flash-ROM,操作成功后ROM_ADDR会自动+1,这点芯片资料没提到。
// 测试代码 // 测试用数据 UINT8X TestData[4] = {1,2,3,4}; UINT8D i = 0; UINT8D Length = 4; // 关闭Flash写保护 SAFE_MOD = 0x55; SAFE_MOD = 0xAA; GLOBAL_CFG |= bCODE_WE | bDATA_WE; // 设置CodeFlash操作地址 ROM_ADDR_L = 0x00; // 写入地址低位 ROM_ADDR_H = 0xF0; // 写入地址高位 // 写入CodeFlash数据 for (i = 0; i != Length; ++i) { ROM_BUF_MOD = 0x80; // 选择单字节编程模式 ROM_DAT_BUF = TestData[i]; // 将数据写入缓冲寄存器 ROM_CTRL = ROM_CMD_PROG; // 执行Flash写入操作(注:操作成功后ROM_ADDR会自动+1) if (ROM_STATUS != 0x40) // 检查操作结果(注:芯片资料有误,这里操作成功会返回0x40) { return ROM_STATUS; // 返回错误代码 } //++ROM_ADDR; // 写入成功后地址+1 } // 启用Flash写保护 SAFE_MOD = 0x55; SAFE_MOD = 0xAA; GLOBAL_CFG &= ~(bCODE_WE | bDATA_WE);