找回密码
 立即注册
查看: 169|回复: 11

关于32G12K128芯片无法调整晶振问题

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-08-08 10:16:59

7

主题

13

回帖

233

积分

中级会员

积分
233
发表于 2025-7-30 11:03:03 | 显示全部楼层 |阅读模式
老师们好,请教一个技术问题,有款产品用的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);
        
}



知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 2025-8-8 14:39:10 | 显示全部楼层
29*** 发表于 2025-8-8 13:41
刚发现一个现象,将ISP软件调整好的IRTRIM与VRTRIM寄存器值打印上来(此时运行正常),再第二次使用代码将 ...

由于芯片存在制造误差,所以不同芯片频段的中间频率有所不同,
从而VRTRIM也就不同,调节频率设置的IRTRIM也不一样。


就算同一颗芯片不同环境温度时烧录时调节设置的IRTRIM也会出现一些偏差。
最终调节出来的时钟频率是否准确可以通过MCLKO将主时钟分频输出到指定脚位进行测量,

而不是读取IRTRIM与VRTRIM进行比较。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 2025-7-30 11:26:02 | 显示全部楼层
屠龙刀核心功能实验板例程包例子有实现这样的功能,可烧录例子到芯片里试试:27-核心硬件功能初始化例程
例程包下载地址:https://www.stcai.com/hxgnsyb
截图202507301123449334.jpg

35M是32G12K128的极限频率,为了避免芯片差异导致个别运行不正常,建议用低1,2个级别以内的频率运行。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-08-08 10:16:59

7

主题

13

回帖

233

积分

中级会员

积分
233
发表于 2025-8-1 10:31:32 | 显示全部楼层
乘风*** 发表于 2025-7-30 11:26
屠龙刀核心功能实验板例程包例子有实现这样的功能,可烧录例子到芯片里试试:27-核心硬件功能初始化例程
例 ...

您好,采用该例程进行测试,发现在33M频率时出现异常
微信图片_20250801103054.png
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 2025-8-1 15:50:15 | 显示全部楼层
29*** 发表于 2025-8-1 10:31
您好,采用该例程进行测试,发现在33M频率时出现异常

例子将主频2分频后通过P1.6输出,可用示波器测一下误差有多少。
33M频率在两个频段之间,可能个别芯片调频时误差会大一些。
截图202508011552299830.jpg

我这里测试是正常的:
截图202508011551259656.jpg

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-08-08 10:16:59

7

主题

13

回帖

233

积分

中级会员

积分
233
发表于 2025-8-8 10:16:59 | 显示全部楼层

这是一片33.1776M异常的芯片,
我将ISP软件自动调整后的参数和出厂参数打印出来,
发现出厂参数与软件调整的相差很大。
建议官方进行抽查批次,是否在生产过程中存在个别参数错误

截图202508081012219075.jpg
截图202508081013341089.jpg
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-08-08 10:16:59

7

主题

13

回帖

233

积分

中级会员

积分
233
发表于 2025-8-8 10:16:59 | 显示全部楼层

这是一片33.1776M异常的芯片,我将ISP软件自动调整后的参数和出厂参数打印出来,发现出厂参数与软件调整的相差很大。建议官方进行抽查批次,是否在生产过程中存在个别参数错误

截图202508081022493372.jpg
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-22 18:38:26

2

主题

195

回帖

1128

积分

金牌会员

积分
1128
发表于 2025-8-8 12:04:23 | 显示全部楼层
以前就有这疑问,厂家内置的IRC频率参数能保证到误差有多少、可靠性有多少,还是说一切随缘,不过好像也没人关注这个
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2025-8-8 13:21:09 | 显示全部楼层
截图202508081320037961.jpg


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2025-8-8 13:32:20 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-08-08 10:16:59

7

主题

13

回帖

233

积分

中级会员

积分
233
发表于 2025-8-8 13:41:04 | 显示全部楼层
刚发现一个现象,将ISP软件调整好的IRTRIM与VRTRIM寄存器值打印上来(此时运行正常),再第二次使用代码将该值写入IRTRIM与VRTRIM寄存器的方式进行频率调整,就会出现频率异常现象,且该方法只有在33.1776M这个参数下会出现问题,测试27M、35M等频率均正常。所以有个疑问,明明写入的值与ISP调整的值是相同的,为何不能正常调整频率?
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 06:42 , Processed in 0.142661 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表