目录
前言
【回眸】AurixTC397的MPS8875A开发之展频篇
知识储备
看懂芯片手册
调整寄存器写入值
修改写入寄存器代码
修改主函数代码
验证和测量
前言
因公需要,大半年来一直对AurixTC397进行开发。实物板子特别大,有很多很多芯片,具体的开发需求经常是对单个芯片进行开发,这个时候就有芯片手册需要去看,实际上芯片手册对于小白来说比较难懂,最好是有个师傅在旁边指导。最近有幸得到其他部门的一位较年长的同事的指导。以此记录MPS8875A芯片的展频开发问题。
【回眸】AurixTC397的MPS8875A开发之展频篇
知识储备
展频相关知识
扩展频谱(Spread Spectrum)技术是一种常用的无线通讯技术,简称展频技术。当主板上的时钟发生器工作时,脉冲的峰值会产生电磁干扰(EMI),展频技术可以降低脉冲发生器所产生的电磁干扰。在没有遇到电磁干扰问题时,应将此类项目的值全部设为“Disabled”,这样可以优化系统性能,提高系统稳定性;如果遇到电磁干扰问题,则应将该项设为“Enabled”以便减少电磁干扰。在将处理器超频时,最好将该项设置为“Disabled”,因为即使是微小的峰值飘移也会引起时钟的短暂突发,这样会导致超频后的处理器被锁死。
看懂芯片手册
在芯片手册中,扩展频谱,就是展频,在芯片手册文档里对应的是FSS frequency spread spectrum (FSS),要求是400KHz 和20%的展频。
本来乍一看这个就感觉头大,好不容易做了心理建设,粗略扫一眼,可以确定寄存器是04H的是控制展频的寄存器,再经过大师指点,发现寄存器03H控制fsw 频率。
寄存器04H可以看到中间456比特位,按要求,20%的展平应该在4、5、6比特位写入04H ,对应写入二进制的值应该是100 ,第三位写入的值是保留位,可以看到芯片手册里介绍保留位写入的值应当是0,其实在确定这个值之前,可以通过读寄存器的函数对寄存器03H和04H进行读取,先读出默认值。读出的默认值是 03H寄存器是0x08,04H寄存器的值是0x97,对应的展频约为5%,频率为400KHz。实际上看芯片手册,原本芯片的04H寄存器默认值应该是00H。
调整寄存器写入值
对应要求400KHz和20%,根据上图可以算出,应该写入04寄存器的值应该为 11000111,对应的十六进制数应该为C7
接下来需要调整寄存器03H
根据默认值写入的0x08对应的400kHz,可以不改变原本默认写入的值,也可以根据要求对其进行修改,或者不放心再指定写入0x08进03H寄存器
修改写入寄存器代码
这里需要在芯片初始化部分对代码进行修改确保寄存器03H和寄存器04H都有所定义
在初始化写入寄存器的代码上新增如下两行
mps8875_write_register(index, MPS8875_REG03, 0x08);
mps8875_write_register(index, MPS8875_REG04, 0xC7);
需要在mps8875.c 驱动文件内添加以下读取寄存器的函数 这里返回值unit8就可以了,我一次到位改了32位实际上并无必要
uint32 mps8875_get_reg4(int index)
{
uint8 val;
val = mps8875_read_register(index, MPS8875_REG04);
return val;
}
uint32 mps8875_get_reg3(int index)
{
uint8 val;
val = mps8875_read_register(index, MPS8875_REG03);
return val;
}
修改主函数代码
在原先主代码的位置中加入读取寄存器的部分
fss = mps8875_get_reg4(MPS8875_U2300_DEVICE);
DbgPrintf("MPS8875-U2300 FSS = 0x%x\r\n", fss);
fre = mps8875_get_reg3(MPS8875_U2300_DEVICE);
DbgPrintf("MPS8875-U2300 FRE = 0x%x\r\n", fre);
需要注意 fss 和fre都需要定义,和上面函数的返回值一致,我这里是unit32.
这一步不是必须要做的,只是为了确保已经正确写入寄存器了。
到这里开发就告一段落
验证和测量
一般使用示波器对其进行测量,示波器测量的时候可以看到与预设有些偏差,比如说测量出来差不多390K,19%左右。由于芯片原因,有一定误差是比较正常的,本次开发已经通过测试。