TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28069: 遇到一颗奇怪的28069芯片请FAE帮忙确认一下

Part Number:TMS320F28069Other Parts Discussed in Thread:UNIFLASH

芯片丝印TMS320F28069PZT,使用也没什么问题。但是发现它的密码区,即0x3F7FF8开始的16个Uint16全部是0x0000,正常来说,这应该是一颗彻底锁死的芯片。但实际我通过SCIA更新固件完全正常。

即使把FLASHA全部擦除,0x3F7FF8开始的16个Uint16还是全部为0x0000,我尝试写入未加密固件,或者加密(密码不是全0)的固件,从0x3F7FF8读出来的16个Uint16始终全部是0x0000.

读取0x3D7E80的PARTID为0x009E,说明是TMS320F28069PZP/PZ,似乎没有什么问题。但是读取0x880开始的PF0内容全部都是0,0x0882地址的CLASSID和0x0883地址的REVID全部都是0x0000,感觉不太正常。

是买到假芯片了?还是设置错误导致的?

Green Deng:

TI建议从官方渠道购买产品: www.ti.com.cn/…/quick-add-to-cart.html。请问你是从哪里购买的芯片?

,

Xiao Dong:

我是技术,具体采购不是我负责的。这颗芯片已经在实际项目中使用,并没有什么问题。只是行为看起来有些异常,是否有可能是内部测试版本?

,

Green Deng:

你是用CCS读取芯片内存的吗?用同一个CCS读取其他芯片的时候没什么问题?

,

Xiao Dong:

我手边暂时只有一块28069板子,明天会测试一下其它板子。测试过28062板子没有问题,主贴中提到的数据和datasheet都对得上。按说28082和28069是一个系列,那些寄存器内容不应该有什么差别。我的固件有读取内存功能。验证过CCS的Memory窗口读取和固件自带读取功能,内容是一样的。

,

Xiao Dong:

请FAE帮忙确认一下,不使用CSM的时候密码区地址0x3F7FF8开始的8个Uint16是全0还是全F,以前型号都是全F,但是我手上几片28069都是全0,和以前型号比如28035和28335不一样。

,

Green Deng:

你好,我这边用uniflash读取了一下未加密的F28069M芯片0x3F7FF8地址的数据,是全“F”。

,

Xiao Dong:

你这个结果和我在28062上看到的是一样的。这就是奇怪的地方,我手上的28069的0x3F7FF8开始8个Uint16全部是0,即使擦除FLASHA以后,0x3F7F80开始CSM_RSVD区域全部为F了,但是0x3F7FF8开始的8个Uint16仍然全部为0.

,

Green Deng:

这个就确实比较奇怪了,正常情况下如果密码区域全0的话是锁死的,无法对flash进行操作。

,

Xiao Dong:

C28x即使密码区全部为0,也是可以擦除固件的,只要固件本身具备擦除FLASHA的功能即可,我以前在别的型号上测试过。现在手上这颗28069芯片,擦除FLASHA以后,密码区并不是全F,而是全0,非常奇怪。芯片丝印的第三行是"C A",Silicon Revision Code = A,说明是A版本。

,

Green Deng:

Xiao Dong 说:只要固件本身具备擦除FLASHA的功能即可

你是说如果固件本身带FlashAPI的擦除函数的话是可以擦除密码区的?这点倒是让我涨知识了,确实没有测试过这个。

但是你提到的芯片丝印和memory的值我认为是没关系的,勘误表里面我也没有找到关于擦除密码区后memory值全为0的说明

TMS320F2806x Real-Time MCUs Silicon Errata (Rev. O)

,

Xiao Dong:

对,就是使用FlashAPI擦除FLASHA,擦除以后密码区就全是FFFF了,自然就解密了。即使密码区全部是0,擦除后也可以全部变成FFFF自动解密。Errata我也看过,没有类似的描述,所以手头这颗28069芯片就很奇怪。因为暂时没有别的芯片,所以问题还是不太好定位。另外28062芯片和28069是同一个系列,具体到这个行为上应该是一样的吧?我可以找到28062的板子来测试。

,

Green Deng:

Xiao Dong 说:另外28062芯片和28069是同一个系列,具体到这个行为上应该是一样的吧?

是的,甚至所有C2000的密码区为0的话应该都是锁死的。所以我这边目前也没办法定位到底是什么问题。。。

,

Xiao Dong:

进一步定位以后,大致找到了原因,但是让人更困惑。

我实现了一个打印内存的函数,用户输入memrd命令,然后参数为实际内存地址,打印用户开始地址的256个Uint16

memlen = (memlen > 0x100) ? 0x100 : (memlen<8) ? 0x80 : memlen;mem = (Uint16 *)startAddr;for(i=0; i<memlen; i++){if(i%8 == 0){xprintf("\n0x%06LX ", startAddr+i);}//	xprintf("%04X ", mem[i]);printx("____ ", mem[i]);}

代码中的xprintf函数为elm-chan的xprintf库,用于实现格式化打印:http://elm-chan.org/fsw/strf/xprintf.html

printx函数是我自己实现的一个格式化打印函数,将下换线替换为hex数字。

使用xprintf的时候,0x3F7F80开始的密码区地址全部为0,0x0880开始地址也全部为0,但是使用printx函数打印就好着。

以下为实际命令,3ff3b0开始为ROM地址,两个函数都可以正确打印,只有密码区0x3F7F80的行为不同。

以下为使用xprintf函数memrd 3ff3b00x3FF3B0 FE02 9641 761F 01C1 9608 CC02 0040 FFC5
0x3FF3B8 5201 EDFC 9207 9642 FE82 0006 FE02 9A00
0x3FF3C0 767F F3B0 9641 7622 761F 01C0 961B 761A
0x3FF3C8 F60F 7700 FF69 9A00 767F F3B0 9641 9604
0x3FF3D0 F60F 7700 56BF 0142 9242 5207 6608 FF69
0x3FF3D8 767F F448 0A42 9242 5207 69FA FE82 FF69
0x3FF3E0 0006 FE02 8F3F F448 761F 0000 A802 7622
0x3FF3E8 761F 01C0 1A1C 0100 56BF 021B 761F 01C1
0x3FF3F0 280A 8000 56BF 0700 56BF 0E01 56BF 7F04
0x3FF3F8 56BF 8700 761F 01BE 180D FFF0 1A08 0015
0x3FF400 1A04 003F 1808 FF3F 1A0B 0008 761F 01BF
0x3FF408 1A05 0008 761A FF69 28A9 0300 767F F3B0
0x3FF410 767F F427 1BA9 08AA EC04 8F3F 7FF6 6F0D
0x3FF418 767F F3BE 767F F726 1E42 767F F701 761F
0x3FF420 01BF 1A03 0008 8A42 A8A9 FE82 0006 FE02
0x3FF428 9A00 767F F3B0 9A00 767F F3B0 9A00 767Fmemrd 3f7f800x3F7F80 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F88 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F90 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F98 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FA0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FA8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FB0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FB8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FC0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FC8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FD0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FD8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FE0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FE8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FF0 0000 0000 0000 0000 0000 0000 007F 2622
0x3F7FF8 0000 0000 0000 0000 0000 0000 0000 0000以下为使用printx函数memrd 3ff3b00x3FF3B0 FE02 9641 761F 01C1 9608 CC02 0040 FFC5
0x3FF3B8 5201 EDFC 9207 9642 FE82 0006 FE02 9A00
0x3FF3C0 767F F3B0 9641 7622 761F 01C0 961B 761A
0x3FF3C8 F60F 7700 FF69 9A00 767F F3B0 9641 9604
0x3FF3D0 F60F 7700 56BF 0142 9242 5207 6608 FF69
0x3FF3D8 767F F448 0A42 9242 5207 69FA FE82 FF69
0x3FF3E0 0006 FE02 8F3F F448 761F 0000 A802 7622
0x3FF3E8 761F 01C0 1A1C 0100 56BF 021B 761F 01C1
0x3FF3F0 280A 8000 56BF 0700 56BF 0E01 56BF 7F04
0x3FF3F8 56BF 8700 761F 01BE 180D FFF0 1A08 0015
0x3FF400 1A04 003F 1808 FF3F 1A0B 0008 761F 01BF
0x3FF408 1A05 0008 761A FF69 28A9 0300 767F F3B0
0x3FF410 767F F427 1BA9 08AA EC04 8F3F 7FF6 6F0D
0x3FF418 767F F3BE 767F F726 1E42 767F F701 761F
0x3FF420 01BF 1A03 0008 8A42 A8A9 FE82 0006 FE02
0x3FF428 9A00 767F F3B0 9A00 767F F3B0 9A00 767Fmemrd 3f7f800x3F7F80 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F88 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F90 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7F98 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FA0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FA8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FB0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FB8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FC0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FC8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FD0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FD8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FE0 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FE8 0000 0000 0000 0000 0000 0000 0000 0000
0x3F7FF0 0000 0000 0000 0000 0000 0000 007F 2622
0x3F7FF8 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF注意0x3F7FF8地址的数据是不同的,这是密码区,用xprintf函数打印读出来全部是0,但是用我的printx函数打印出来就是FFFF

真的让人很困惑。

,

Green Deng:

额,这样的话可能我这边也看不出什么问题了,我建议你将问题升级到英文E2E论坛,看看那边的工程师有没有什么相关的经验。

e2e.ti.com/…/c2000-microcontrollers-forum

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28069: 遇到一颗奇怪的28069芯片请FAE帮忙确认一下
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1