Files
kunlun/dtest/dtest3/kl3_smc_test/readme.md

76 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

2024-09-28 14:24:04 +08:00
# smc测试例程说明文档
本测试程序用于测试smc基础功能包括对smc寄存器读写、通过smc api或者cache访问外部psram数据等例程。
## smc简介
smc全程为spi psram controller从属于EMCexternal memory controller模块是芯片内部封装的用于访问外部psram的功能模块简化了软件访问外部psram的逻辑和时序其主要特点如下
* 支持软件访问和cache访问。
* smc内部具有的512字节ram此ram空间和sfc共用且不能同时使用提高软件访问psram的效率。
* DPdata path逻辑实现spi和控制器之间的时钟跨域处理以及数据支持自动加密、解密AES
* 支持io map逻辑实现spi接口信号的remapping操作方便适配不同flash芯片接口。
* 支持io share实现sfc和smc io分时复用。
* 支持spi接口任意波形发生器可配置posedge或者negedge收发可增加dummy cycle来改善io timing
smc常规用法是配置为cache访问即访问psram时不通过smc api进行而是直接通过cache访问psram映射到总线上的地址空间。
## 测试例程说明
sfc测试例程使用到的外设包含smc、uart、gptimer、cache。
* smc测试对象用于测试smc对外部psram的访问和控制。
* uart使用uart0实现调试信息打印接收case配置信息等与PC的交互功能。
* gptimer使用gptimer0用于计算全片读写psram时用时情况。
* cache通过cache高效的读写psram。
smc测试例程遵循自动化测试框架在例程执行之后初始化串口0通过串口发送“start”字段到PC并等待PC发送“config”字段来获取本次需要执行的测试case如果在规定时间内9s没有收到测试case信息则默认测试所有的case。
在获取到case组合之后初始化emc、smccache以及gptimer并根据case组合开始执行测试case。
### case0获取psram大小测试
该功能通过在ram.bin程序中使用用于判断模块拥有的psram是否和烧录固件中定义的一致。
其实现的原理是运用的psram所具有的写环回机制实现的当写指令发送到psram时psram芯片会判断地址是否合法如果地址超出psram本身大小则截断高位地址并将数据写入低位地址中例如psram大小为4m当smc写入的地址为0x400000时地址会被截断为0x000000当地址为0x500000时地址会被截断为0x100000。利用该原理从0地址开始增量为0x100000对地址进行写入操作并在0地址读取数据当发现0地址数据和写入数据一致时则认为发生写环回当前写入的地址则为psram实际大小。
**cache具有的space寄存器主要功能是拦截地址非法的指令发送到flash\psram**如配置smc_space为4表示最大允许访问的psram地址为4m超出4m的读写操作将直接被抛弃不会发送到psram中。
在实际的测试中能正确的测试出psram大小。
### case1通过smc api读写psram数据测试
【注】kl3的smc取消了内部的buffer改为和sfc共用同一个buffer但是同一时刻仅能有一个外设使用该buffersfc是固定要使用该buffer的因此smc的驱动中使用buffer的trans mode仅用于测试。
smc读写API主要有两个方式
1. 使用内部buffer配置smc为trans_mode将数据将拷贝到buffer中一次性发送到psram读取时硬件自动将数据保存到buffer中等读取完成后只需要将数据从buffer中拷贝出来即可。
2. 使用寄存器方式配置smc为reg_op_mode每次写4个字节数据到wdata寄存器中每次发送地址重新配置地址通过循环发送的方式将数据发送到psram。读取同理。
然而在测试的过程中遇到如下问题:
1. 使用上述两种发送方式即使wdata寄存器和buffer都存在有效数据的情况下每次发送的数据都是0x00。
2. asic提示要将soft_smc_mode置1在置1之后重新测试两种发送发送均出现发送完地址之后cs信号拉高结束了本次发送。
针对以上两个问题asic建议smc先保证cache读写psram正常smc api读写psram的方式后续asic进行仿真查找异常原因目前先禁用该测试。
### case3cache读写psram测试
本测试相对简单主要验证所有cache访问psram的有效性。测试步骤如下
1. 使用icache0在psram 0x00地址写入4k数据。
2. 轮流使用所有cache读取该地址并判断读出的数据和写入数据是否一致不一致则判定测试失败。
为了确保cache中的数据被写入到psram中需要使用flush函数和invalidata函数将数据刷新到psram或者同步psram数据到cache中。
测试结果OK。
### case4psram全片读写测试
本测试相对简单主要验证psram芯片完整性测试步骤如下
1. 使用icache0对psram全片写入0x55。
2. 使用icache0读出全片数据读的过程中对比数据是否和写入数据一致如果不一致则认为测试失败。
3. 将写入数据更改为0xaa重复步骤1和步骤2。
这里为了缩短本测试时间将cache_wr_auto_load寄存器位置0即当cache miss时不自动同步数据事实上本例程独立执行此时cache没有其他人基本很少发生cache miss测试读写4m psram所用时间为14678us。