关于32G12K128芯片无法调整晶振问题
老师们好,请教一个技术问题,有款产品用的32G12K128这款芯片,测试过程中发现个别芯片的晶振无法调整到正确的频率,个别频率段会出现问题,
每个芯片出现异常的频率不一样,其中35M出现异常的个数最多,
以下是参考手册写的一个调整晶振的代码,麻烦帮忙看看;
使用AIapp-ISP工具进行调整晶振烧录的话可以调整到预期的频率,只是用户代码调整会出问题。
#define T22M_ADDR CHIPID11 //22.1184MHz
#define T24M_ADDR CHIPID12 //24MHz
#define T27M_ADDR CHIPID13 //27MHz
#define T30M_ADDR CHIPID14 //30MHz
#define T33M_ADDR CHIPID15 //33.1776MHz
#define T35M_ADDR CHIPID16 //35MHz
#define T36M_ADDR CHIPID17 //36.864MHz
#define T40M_ADDR CHIPID18 //40MHz
#define T44M_ADDR CHIPID19 //44.2368MHz
#define T48M_ADDR CHIPID20 //48MHz
#define VRT6M_ADDR CHIPID21//VRTRIM_6M
#define VRT10M_ADDR CHIPID22//YRTRIM_10M
#define VRT27M_ADDR CHIPID23//VRTRIM_27M
#define VRT44M_ADDR CHIPID24//VRTRIM_44M
void ModifyIRC(void)
{
bit eafxr;
eafxr = EAXFR;//缓存权限
EAXFR =1; //使能访问XFR寄存器
switch (FOSC)
{
case 22118400UL://选择22.1184MHz
CLKDIV= 0x04;
IRTRIM= T22M_ADDR;
VRTRIM= VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV= 0x00;
break;
case 24000000UL://选择24MHz
CLKDIV= 0x04;
IRTRIM= T24M_ADDR;
VRTRIM= VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV= 0x00;
break;
case 27000000UL://选择27MHz
CLKDIV= 0x04;
IRTRIM= T27M_ADDR;
VRTRIM= VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV= 0x00;
break;
case 30000000UL://选择30MHz
CLKDIV= 0x04;
IRTRIM= T30M_ADDR;
VRTRIM= VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV= 0x00;
break;
case 33177600UL://选择33.1776MHz
Default:
CLKDIV= 0x04;
IRTRIM= T33M_ADDR;
VRTRIM= VRT27M_ADDR;
IRCBAND = 0x02;
CLKDIV= 0x00;
break;
case 35000000UL://选择35MHz
CLKDIV= 0x04;
IRTRIM= T35M_ADDR;
VRTRIM= VRT44M_ADDR;
IRCBAND = 0x03;
CLKDIV= 0x00;
break;
case 44236800UL://选择44.2368MHz
CLKDIV= 0x04;
IRTRIM= T35M_ADDR;
VRTRIM= VRT44M_ADDR;
IRCBAND = 0x03;
CLKDIV= 0x00;
break;
case 48000000UL://选择48MHz
CLKDIV= 0x04;
IRTRIM= T48M_ADDR;
VRTRIM= VRT44M_ADDR;
IRCBAND = 0x03;
CLKDIV= 0x00;
break;
default:
goto Default;
break;
}
EAXFR=eafxr;//归还权限
NOP(40);
NOP(40);
NOP(40);
NOP(40);
}
29aH 发表于 2025-8-8 13:41
刚发现一个现象,将ISP软件调整好的IRTRIM与VRTRIM寄存器值打印上来(此时运行正常),再第二次使用代码将 ...
由于芯片存在制造误差,所以不同芯片频段的中间频率有所不同,
从而VRTRIM也就不同,调节频率设置的IRTRIM也不一样。
就算同一颗芯片不同环境温度时烧录时调节设置的IRTRIM也会出现一些偏差。
最终调节出来的时钟频率是否准确可以通过MCLKO将主时钟分频输出到指定脚位进行测量,
而不是读取IRTRIM与VRTRIM进行比较。
屠龙刀核心功能实验板例程包例子有实现这样的功能,可烧录例子到芯片里试试:27-核心硬件功能初始化例程
例程包下载地址:https://www.stcai.com/hxgnsyb
35M是32G12K128的极限频率,为了避免芯片差异导致个别运行不正常,建议用低1,2个级别以内的频率运行。 乘风飞扬 发表于 2025-7-30 11:26
屠龙刀核心功能实验板例程包例子有实现这样的功能,可烧录例子到芯片里试试:27-核心硬件功能初始化例程
例 ...
您好,采用该例程进行测试,发现在33M频率时出现异常 29aH 发表于 2025-8-1 10:31
您好,采用该例程进行测试,发现在33M频率时出现异常
例子将主频2分频后通过P1.6输出,可用示波器测一下误差有多少。
33M频率在两个频段之间,可能个别芯片调频时误差会大一些。
我这里测试是正常的:
https://www.stcaimcu.com/forum.php?mod=image&aid=110996&size=300x300&key=e307d79fb506b75d&nocache=yes&type=fixnonehttps://www.stcaimcu.com/forum.php?mod=image&aid=110994&size=300x300&key=48be62ca6b193b14&nocache=yes&type=fixnone
这是一片33.1776M异常的芯片,
我将ISP软件自动调整后的参数和出厂参数打印出来,
发现出厂参数与软件调整的相差很大。
建议官方进行抽查批次,是否在生产过程中存在个别参数错误
https://www.stcaimcu.com/forum.php?mod=image&aid=111002&size=300x300&key=6bdf9bc8b10e08eb&nocache=yes&type=fixnonehttps://www.stcaimcu.com/forum.php?mod=image&aid=110994&size=300x300&key=48be62ca6b193b14&nocache=yes&type=fixnone
这是一片33.1776M异常的芯片,我将ISP软件自动调整后的参数和出厂参数打印出来,发现出厂参数与软件调整的相差很大。建议官方进行抽查批次,是否在生产过程中存在个别参数错误
以前就有这疑问,厂家内置的IRC频率参数能保证到误差有多少、可靠性有多少,还是说一切随缘,不过好像也没人关注这个
https://www.stcaimcu.com/data/download/Datasheet/STC32G.pdf
刚发现一个现象,将ISP软件调整好的IRTRIM与VRTRIM寄存器值打印上来(此时运行正常),再第二次使用代码将该值写入IRTRIM与VRTRIM寄存器的方式进行频率调整,就会出现频率异常现象,且该方法只有在33.1776M这个参数下会出现问题,测试27M、35M等频率均正常。所以有个疑问,明明写入的值与ISP调整的值是相同的,为何不能正常调整频率?
页:
[1]
2