CH32V208开发板提供了对两类外部存储器件的支持,即AT24CXX系列和W25QXX系列。
由于在开发板上并没有提供这两类器件,因此在测试时是以外挂模块的形式来进行。
1)AT24C02测试
AT24C02是一种以I2C接口方式工作的存储器件,受容量的限制它多原来存储相应的工作参数,以实现掉电不丢失的作用。
AT24C02与开发板的连接关系为:
SCL----PB10
SDA---PB11
具体的测试电路连接如图1所示:
图1 AT24C02测试电路
相应的测试主程序为:
const u8 TEXT_Buffer[]={"CH32V208 I2C TEST"};int main(void)
{
u8 data[SIZE];
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\\r\\n",SystemCoreClock);
AT24CXX_Init();
printf("Start Write 24Cxx....\\r\\n");
AT24CXX_Write(100,(u8*)TEXT_Buffer,SIZE);
printf("24Cxx Write Sucess!\\r\\n");
Delay_Ms(500);
printf("Start Read 24Cxx....\\r\\n");
AT24CXX_Read(100,data,SIZE);
printf("The Data Readed Is:\\r\\n");
printf("%s\\r\\n", data);
while(1);
}
其测试过程为:AT24CXX初始化--->将数组的内容写入器件--->读取器件写入区间的数据--->输出读取数据
在连接串口的情况下,其测试结果如图2所示,说明读写过程正确。
图2 测试结果
2)W25Q16测试
W25Q16是一种以SPI接口方式工作的存储器件,其容量相对比较大,可用来存储工作数据或图像数据等。
W25Q16与开发板的连接关系为:
CS ----PA2
DO ---- PA6
WP ----3.3V
DI ---- PA7
CLK ---- PA5
HOLD ----3.3V
具体的测试电路连接如图3所示:
图3 W25Q16测试电路
其测试过程为: 初始化处理--->读取存储器ID--->识别器件类型--->擦除指定扇区的数据--->读取指定驱动的数据--->将数组的内容写入器件--->读取器件写入区间的数据--->输出读取数据
相应的测试主程序为:
u8 SPI_FLASH_BUF[4096];
const u8 TEXT_Buf[] = {"CH32V208 SPI FLASH W25Qxx"};
#define SIZE sizeof(TEXT_Buf)
int main(void)
{
u8 datap[SIZE];
u16 Flash_Model;
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\\r\\n",
SystemCoreClock);
SPI_Flash_Init();
Flash_Model = SPI_Flash_ReadID();
switch(Flash_Model)
{
case W25Q80:
printf("W25Q80 OK!\\r\\n");
break;
case W25Q16:
printf("W25Q16 OK!\\r\\n");
break;
case W25Q32:
printf("W25Q32 OK!\\r\\n");
break;
case W25Q64:
printf("W25Q64 OK!\\r\\n");
break;
case W25Q128:
printf("W25Q128 OK!\\r\\n");
break;
default:
printf("Fail!\\r\\n");
break;
}
printf("Start Erase W25Qxx....\\r\\n");
SPI_Flash_Erase_Sector(0);
printf("W25Qxx Erase Finished!\\r\\n");
Delay_Ms(500);
printf("Start Read W25Qxx....\\r\\n");
SPI_Flash_Read(datap, 0x0, SIZE);
printf("%s\\r\\n", datap);
Delay_Ms(500);
printf("Start Write W25Qxx....\\r\\n");
SPI_Flash_Write((u8 *)TEXT_Buf, 0, SIZE);
printf("W25Qxx Write Finished!\\r\\n");
Delay_Ms(500);
printf("Start Read W25Qxx....\\r\\n");
SPI_Flash_Read(datap, 0x0, SIZE);
printf("%s\\r\\n", datap);
while(1);
}
在连接串口的情况下,其测试结果如图4所示,说明读写过程正确。
图4 测试结果
由于CH32V208只有128KB的flash,故在显示一幅图片时往往无法将图片数据嵌入到程序中,此时若无其它存储介质的帮助,使用W25Q16来存储图像数据还是比较合适的。