查看: 39221|回复: 20

[原创] 【原创】imx6 eFUSE的一种烧写方法

[复制链接]

该用户从未签到

9

主题

34

帖子

0

注册会员

Rank: 2

积分
129
最后登录
1970-1-1
发表于 2014-1-15 21:25:28 | 显示全部楼层 |阅读模式
我自己根据Sabrelite的板子,稍作修改,增加了部分功能,自己Layout了一块板子,涉及板子启动问题,官方没有一个比较明确的文档来说明如何烧写eFUSE,我自己土办法,研究了一顿时间,拿出来分享一下,如果哪位大虾有更好的方法,请不吝赐教,更共同成长。
1、BOOT_MODE[1:0]设置成00,未烧写eFUSE时,芯片默认是从NOR FLASH启动,因为板子上没有可启动的代码,所以芯片会主动切换至下载模式
2、利用MfgTools将uboot下载到RAM中运行(只下载uboot),具体犯法如下
      在MfgTools的ucl.xml里面,把烧写FLASH或者SD卡啥的都注释掉,只留Load uBoot,部分,如下

      Loading uboot.
     Jumping to OS image.
3、在串口输出的地方中断自动启动,进入uboot命令行交互方式,Sabrlite自带的uboot提供了eFUSE烧写命令,分别是imxotp read addr和imxotp blow --force addr value,读写eFUSE数据,
其中addr是(eFUSE的寄存器地址-eFUSE基地址-0x400/0x10eFUSE的基地址是0x021BC0000,具体定义见《iMX6DQRM.pdf》第46章,P4016
具体的配置值,参见《iMX6DQRM.pdf》第5章,P351。
imxotp blow这个命令在芯片未复位的情况下,是可以修改烧进去的值的。等芯片复位后,烧进去的值不能再更改了。
我自己的板子还是继承了Sabrelie SPI FLASH启动方式,只需要烧写0x450寄存器,即imxotp blow --force 0x5 0x10c00030
回复

使用道具 举报

该用户从未签到

45

主题

2369

帖子

0

金牌会员

Rank: 6Rank: 6

积分
3278
最后登录
1970-1-1
发表于 2014-1-16 09:35:57 | 显示全部楼层

RE:【原创】imx6 eFUSE的一种烧写方法

非常不错,感谢楼主分享~~
感谢对我们论坛及飞思卡尔产品的支持~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

15

帖子

0

新手上路

Rank: 1

积分
19
最后登录
1970-1-1
发表于 2014-1-20 09:03:03 | 显示全部楼层

回复:【原创】imx6 eFUSE的一种烧写方法

楼主我想问问你用的是IMX6的那块板子,我也在做这方面的东西,需要更改板子的启动模式,我用的板子默认SD卡启动,想更改为NOR FLASH启动,具体改动还存在问题。
回复 支持 反对

使用道具 举报

该用户从未签到

131

主题

835

帖子

0

金牌会员

Rank: 6Rank: 6

积分
10021
最后登录
1970-1-1
发表于 2014-1-20 09:06:10 | 显示全部楼层

RE:【原创】imx6 eFUSE的一种烧写方法

cool!!!
回复 支持 反对

使用道具 举报

该用户从未签到

45

主题

2369

帖子

0

金牌会员

Rank: 6Rank: 6

积分
3278
最后登录
1970-1-1
发表于 2014-1-20 13:18:53 | 显示全部楼层

RE:【原创】imx6 eFUSE的一种烧写方法

樓主你好,還可以通過u-boot命令去燒寫. 在Linux BSP文檔包里面, i.MX_6Dual6Quad_Sabre-SD_Linux_User_Guide.pdf 中提到imxotp命令:
10.1 How to Fuse in U-Boot

U-Boot contains a tool, imxotp, which is used for fusing.
U-Boot > imxotp
imxotp - One-Time Programable sub-system

Usage:
imxotp imxotp read
- read fuse at 'index'
imxotp blow [--force]
- blow fuse at 'index' with hex value 'value'

Tips:
'addr' to 'index':
convert 'index' from 'address'
index = (addr - otp_base) / 0x10

eg, addr is 0x021bc410, otp_base is 0x021bc400, the index = 1

• '--force' must be present in order to blow the fuse. Command will abort if '--force' is missing.
• index = (addr - otp_base) / 0x10, where the addr is the address of the fuse you want to operate, the otp_base is the base address of the fuse block.
• 'value' should correspond to fuse settings according to the fuse map and desired fuse configuration.
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

34

帖子

0

注册会员

Rank: 2

积分
129
最后登录
1970-1-1
 楼主| 发表于 2014-1-20 19:41:43 | 显示全部楼层

回复:【原创】imx6 eFUSE的一种烧写方法

回复第 3 楼 于2014-01-20 09:03:03发表:
楼主我想问问你用的是IMX6的那块板子,我也在做这方面的东西,需要更改板子的启动模式,我用的板子默认SD卡启动,想更改为NOR FLASH启动,具体改动还存在问题。 

我从淘宝上买了一块Sabrelite的板子,然后根据附带的原理图,扩展了一些功能,然后自己Layout的。你从Freescale的供应商那买回的新片子,默认启动方式就是NOR FLASH,你只要根据datasheet里,NOR FLASH启动方式,将NOR FLASH接好,应该就可以了吧。估计都不用烧写eFUSE。或者只要烧写BIT_EFUSE的那个什么位。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

15

帖子

0

新手上路

Rank: 1

积分
19
最后登录
1970-1-1
发表于 2014-1-21 10:08:03 | 显示全部楼层

回复:【原创】imx6 eFUSE的一种烧写方法

回复第 6 楼 于2014-01-20 19:41:43发表:嗯,谢谢您的回答,它的启动方式是上电执行BOOT ROM里面的启动代码,读 BOOT_MODE[1:0]的寄存器值、eFUSEs状态和GPIO Setting 来决定启动devices ,他默认是启动方式是执行外接的SPI FLASH里面的代码吗?我刚接触不是很清楚他的启动流程 ,在用Mfgtools工具烧写时他是将u-boot烧写到SPI FLASH里面,内核及文件系统烧写到板子的SD卡吗?
回复第 3 楼 于2014-01-20 09:03:03发表:
楼主我想问问你用的是IMX6的那块板子,我也在做这方面的东西,需要更改板子的启动模式,我用的板子默认SD卡启动,想更改为NOR FLASH启动,具体改动还存在问题。 

我从淘宝上买了一块Sabrelite的板子,然后根据附带的原理图,扩展了一些功能,然后自己Layout的。你从Freescale的供应商那买回的新片子,默认启动方式就是NOR FLASH,你只要根据datasheet里,NOR FLASH启动方式,将NOR FLASH接好,应该就可以了吧。估计都不用烧写eFUSE。或者只要烧写BIT_EFUSE的那个什么位。
 
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

15

帖子

0

新手上路

Rank: 1

积分
19
最后登录
1970-1-1
发表于 2014-1-21 10:09:11 | 显示全部楼层

回复:【原创】imx6 eFUSE的一种烧写方法

嗯,谢谢您的回答,它的启动方式是上电执行BOOT ROM里面的启动代码,读 BOOT_MODE[1:0]的寄存器值、eFUSEs状态和GPIO Setting 来决定启动devices ,他默认是启动方式是执行外接的SPI FLASH里面的代码吗?我刚接触不是很清楚他的启动流程 ,在用Mfgtools工具烧写时他是将u-boot烧写到SPI FLASH里面,内核及文件系统烧写到板子的SD卡吗?
回复 支持 反对

使用道具 举报

该用户从未签到

45

主题

2369

帖子

0

金牌会员

Rank: 6Rank: 6

积分
3278
最后登录
1970-1-1
发表于 2014-1-21 14:56:20 | 显示全部楼层

回复:【原创】imx6 eFUSE的一种烧写方法

回复第 8 楼 于2014-01-21 10:09:11发表:
嗯,谢谢您的回答,它的启动方式是上电执行BOOT ROM里面的启动代码,读 BOOT_MODE[1:0]的寄存器值、eFUSEs状态和GPIO Setting 来决定启动devices ,他默认是启动方式是执行外接的SPI FLASH里面的代码吗?我刚接触不是很清楚他的启动流程 ,在用Mfgtools工具烧写时他是将u-boot烧写到SPI FLASH里面,内核及文件系统烧写到板子的SD卡吗? 

1、楼主你好,关于你说的I.MX6Q开板的烧写过程及程序的执行流程,上电以后BOOT_MODE以及BOOT_CFG的 值,BOOT_CFG0,1,2,3.这是CPU内部寄存器。当板子上电时,CPU 内部固化的ROM  CODE会去读BOOT_CFG几个寄存器的内容,从而决定从哪个Flash启动。
2、你前面提到的,用MFGTool烧写,将u-boot、内核及文件系统烧写到哪个flash上面是由MFGTool中ucl2.xml文件中的内容来 执行的。你可以将u-boot烧写到SPI  FLASH里面,内核及文件系统烧写到板子的SD卡上;也可以将u-boot、内核及文件系统都烧写到SD卡上。这个完全取决于你的ucl2.xml文件 内容,因为MFGTool是依照MFGTool内容运行的。
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

34

帖子

0

注册会员

Rank: 2

积分
129
最后登录
1970-1-1
 楼主| 发表于 2014-3-20 16:47:54 | 显示全部楼层

RE:【原创】imx6 eFUSE的一种烧写方法

【更新一下烧写值】
imxotp blow --force 0x5 0x18000030
imxotp blow --force 0x6 0x10

这样CPU能正常启动
但有个问题,这样的话批量生产怎么搞呢,这样是比较麻烦的,因为要接串口,不能一键搞定。无法完成自动化烧写
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-5 06:36 , Processed in 0.099967 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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