This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi,
My customer has customized the bootpin with the following settings.
Their parameters look like this:
Z1OTP-GPREG1(0x7800C):0x5AFFFFFF
Z1OTP-GPREG3(0x7801C):0xFFFFFF03
Z1OTP-GPREG2(0x7800E):0x5AFFFFFF
Bx-ZxOTP-GRABSECT(0x5F01A, 0x5F05A, 0x5F15A):0xAAAAAAAA
ZxOTP-GRABRAM(0x5F01C, 0x5F05C):0xFFFFAAAA
They found that when they flashed the device with this setting and booted, the program stopped at the following point:
Checking the error flags, the device seems to get a FLASH ECC error at 0x7800C.
They are writing with "Auto ECC Generation" enabled. Any idea why this error is printed?
Best rgards,
Sasaki
Hi Sasaki-san,
Did the user program 64-bits (or 128-bits) at once when programming the OTP? It is required to program all the 64-bits of a 64-bit aligned address at the same time.
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for your reply.
My customer is using the following cmd file output by Sysconfig.
Will this file be programmed as 64bit aligned?
I would like to have the cmd file needed to program the OTP as 64bit aline, if any.
/* this linker command file is to be included if user wants to use the DCSM feature on the device * DCSM means Dual Zone Code Security Module. * This linker command file works as an addendum ot the already existing Flash/RAM linker command file * that the project has. * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and * doesn't provide the needed proper *_ZoneSelectBlock.asm sources . * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this. * * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed. * */ MEMORY { PAGE 0 : /* Program Memory */ /* Z1 OTP. LinkPointers */ DCSM_OTP_Z1_LINKPOINTER : origin = 0x78000, length = 0x00000C /* Z1 OTP. GPREG1/GPREG2 */ DCSM_OTP_Z1_GPREG : origin = 0x7800C, length = 0x000004 /* Z1 OTP. PSWDLOCK/RESERVED */ DCSM_OTP_Z1_PSWDLOCK : origin = 0x78010, length = 0x000004 /* Z1 OTP. CRCLOCK/RESERVED */ DCSM_OTP_Z1_CRCLOCK : origin = 0x78014, length = 0x000004 /* Z1 OTP. RESERVED/BOOTCTRL */ DCSM_OTP_Z1_BOOTCTRL : origin = 0x7801C, length = 0x000004 /* DCSM Z1 Zone Select Contents (!!Movable!!) */ /* Z1 OTP. Z1 password locations / Flash and RAM partitioning */ DCSM_ZSEL_Z1_P0 : origin = 0x78020, length = 0x000010 /* Z2 OTP. LinkPointers */ DCSM_OTP_Z2_LINKPOINTER : origin = 0x78200, length = 0x00000C /* Z2 OTP. GPREG1/GPREG2 */ DCSM_OTP_Z2_GPREG : origin = 0x7820C, length = 0x000004 /* Z2 OTP. PSWDLOCK/RESERVED */ DCSM_OTP_Z2_PSWDLOCK : origin = 0x78210, length = 0x000004 /* Z2 OTP. CRCLOCK/RESERVED */ DCSM_OTP_Z2_CRCLOCK : origin = 0x78214, length = 0x000004 /* Z2 OTP. GPREG3/BOOTCTRL */ DCSM_OTP_Z2_BOOTCTRL : origin = 0x7821C, length = 0x000004 /* DCSM Z2 Zone Select Contents (!!Movable!!) */ /* Z2 OTP. Z2 password locations / Flash and RAM partitioning */ DCSM_ZSEL_Z2_P0 : origin = 0x78220, length = 0x000010 /* BANK1 */ /* B1 Z1 OTP. LinkPointers */ B1_DCSM_OTP_Z1_LINKPOINTER : origin = 0x78400, length = 0x00000C /* DCSM B1 Z1 Zone Select Contents (!!Movable!!) */ /* B1 Z1 OTP. Flash partitioning */ B1_DCSM_ZSEL_Z1_P0 : origin = 0x78420, length = 0x000010 /* B1 Z2 OTP. LinkPointers */ B1_DCSM_OTP_Z2_LINKPOINTER : origin = 0x78600, length = 0x00000C /* DCSM B1 Z2 Zone Select Contents (!!Movable!!) */ /* B1 Z2 OTP. Flash partitioning */ B1_DCSM_ZSEL_Z2_P0 : origin = 0x78620, length = 0x000010 } SECTIONS { dcsm_otp_z1_linkpointer : > DCSM_OTP_Z1_LINKPOINTER PAGE = 0 dcsm_otp_z1_gpreg : > DCSM_OTP_Z1_GPREG PAGE = 0 dcsm_otp_z1_pswdlock : > DCSM_OTP_Z1_PSWDLOCK PAGE = 0 dcsm_otp_z1_crclock : > DCSM_OTP_Z1_CRCLOCK PAGE = 0 dcsm_otp_z1_bootctrl : > DCSM_OTP_Z1_BOOTCTRL PAGE = 0 dcsm_zsel_z1 : > DCSM_ZSEL_Z1_P0 PAGE = 0 dcsm_otp_z2_linkpointer : > DCSM_OTP_Z2_LINKPOINTER PAGE = 0 dcsm_otp_z2_gpreg : > DCSM_OTP_Z2_GPREG PAGE = 0, type = DSECT dcsm_otp_z2_pswdlock : > DCSM_OTP_Z2_PSWDLOCK PAGE = 0 dcsm_otp_z2_crclock : > DCSM_OTP_Z2_CRCLOCK PAGE = 0 dcsm_otp_z2_bootctrl : > DCSM_OTP_Z2_BOOTCTRL PAGE = 0, type = DSECT dcsm_zsel_z2 : > DCSM_ZSEL_Z2_P0 PAGE = 0 b1_dcsm_otp_z1_linkpointer : > B1_DCSM_OTP_Z1_LINKPOINTER PAGE = 0 b1_dcsm_zsel_z1 : > B1_DCSM_ZSEL_Z1_P0 PAGE = 0 b1_dcsm_otp_z2_linkpointer : > B1_DCSM_OTP_Z2_LINKPOINTER PAGE = 0 b1_dcsm_zsel_z2 : > B1_DCSM_ZSEL_Z2_P0 PAGE = 0 } /* //=========================================================================== // End of file. //=========================================================================== */
Best regards,
Sasaki
Hi Sasaki-san,
Just to confirm: Customer is programming all of the OTP fields as part of the .out file and not by using the GUI or the flash API - correct?
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for you support.
Yes, it is correct. They included the SYSCONFIG generated files in the project and build with CCS to create the outfile.
They are loading this outfile using CCS.
Best regards,
Sasaki
Sasaki-san,
I think I understand what might be happening here.
Maybe the flash tool is programming 128-bits at once from 0x78008 to 0x7800F assuming all 1s data for 0x7800C to 0x7800F.
I need to check with our team and get back to you on this.
Please expect a reply mid-next week.
Thanks and regards,
Vamsi
Sasaki-san,
Can you provide the executable file for us to reproduce?
And also the verbose output (you can enable at the bottom of the CCS flash plugin GUI) of the console window when loading this code?
Thanks and regards,
Vamsi
Hi Sasaki-san,
I received the files from you.
We will try and get back to you next week.
Thanks and regards,
Vamsi
Hi Sasaki-san,
We are able to load the file without any issue on a new device.
I think there is a collision between the previously programmed content in the device and the values that they are programming later.
Can you send snapshots of the address 0x7800C (better take from 0x78000 to 0x7800F) and it's ECC space?
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for your reply.
Z1OTP-GPREG1 (0x7800C) is 0x5AFFFFFF.
I will check with the customer for values between 0x78000 and 0x7800F and report back afterwards.
Best regards,
Sasaki
Hi Sasaki-san,
Yes, please send the full data + ECC.
Thanks and regards,
Vamsi
Hi Vamsi-san,
I send the full data.
I will check if there is any other information needed.
Best regards,
Sasaki
Hi Sasaki-san,
Thank you for the info. I will review and get back to you early next week.
Thanks and regards,
Vamsi
Hi Sasaki-san,
As requested previously, please send the ECC space snapshot as well.
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for your reply.
Attached below.
Please let me know if there is any other information you need.
Best regards,
Sasaki
Hi Sasaki-san,
ECC address space is shown in below table taken from the datasheet. Need that address range view.
Thanks and regards,
Vamsi
Hi Vamsi-san,
I got it from my customer.
ECC address space is shown in below.
Best regards,
Sasaki
Hi Sasaki-san,
I will review and get back to you in couple of days.
Thanks and regards,
Vamsi
Hi Sasaki-san,
Is this device programmed multiple times? Is this snapshot taken from the device on which the flash uncorrectable error is noticed?
Thanks and regards,
Vamsi
Hi Sasaki-san,
Our team's tool expert is able to load your image (also reload again without any issues) and verify it successfully.
We did not notice any issue loading it.
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for your reply.
I had a similar problem with a customer on my LaunchPad.
My DCSM has the following settings, are your settings the same?
Best regards,
Sasaki
Hi Sasaki-san,
In your snapshots, Zone1OTP_GPREG1 is showing as 0xFFFFFFFF.
It should show up as 0x5AFFFFFF if it is already programmed using the customer image.
I would suggest you to have a debug call with Vivek Singh (our security expert) to close this issue.
Thanks and regards,
Vamsi
Sasaki-san,
From the ECC value snapshot you have provided, it's clear that ECC is not programmed for 0x7800C address hence you are getting ECC error. Can you check if user has latest update for C2000 files. If they are not using latest file then please ask them to check for update and install latest update.
Regards,
Vivek Singh
Hi Vivek-san,
Thank you for you reply.
Please let me know as I have additional questions.
Q1) The relationship between F28004x data and ECC is as follows. Is this correct?
Q2) How do I program ECC for address 0x7800C?
I have AutoECC enabled and programmed as below.
I would like to know how to program to resolve this error.
Best regards,
Sasaki
Hi Sasaki-san,
1) Yes the mapping is correct.
2) Are you programming the OTP-GPREGx from the out file or from the GUI fields? If you are programming from the code, I think it might be that the Sysconfig tool is generating a single block of data for link-pointers and the locations that we are discussing. When link-pointer address comes in, the plugin will avoid programming the ECC. F28004x plugin was designed for separate block of link-pointers. Let me discuss this with the Sysconfig team.
Please confirm whether the program is done as part of out file or from the GUI.
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for your support.
The program is done as part of out file.
My setting is follows.
This is a project with nothing but the DCSM settings above.
I also additionally tried to write from the following GUI But the result is still the same.
Best regards,
Sasaki
Hi Sasaki-san,
Thank you for the info. You are saying that the ECC is not getting programmed irrespective of whether you program via out file or via the GUI.
Which version CCS are you using?
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you for the info. You are saying that the ECC is not getting programmed irrespective of whether you program via out file or via the GUI.
I understand it.
Which version CCS are you using?
I'm using CCS v11.2.
Best regards,
Sasaki
Sasaki-san,
Our Tools team tried.
On a clean chip, this is what the memory view at OTP and ECC looks like before programming:
After 0x5AFFFFFF is programmed to Z1OTP-GPREG1 and Z1OTP-GPREG2 using the GUI, both the OTP and ECC memory are updated as below:
Thanks and regards,
Vamsi
Sasaki-san,
Maybe you can have a debug call with our tools team.
Email me and I will loop you with them.
Thanks and regards,
Vamsi
Hi Vamsi-san,
Thank you. I sent you my email address in a private message.
Best regards,
Sasaki
Sasaki,
Thank you for the message. I will loop you with the tools team regarding the GUI behavior.
What is the version of C2000Ware that the customer is using to create the out file? Hope they are using the latest one.
Thanks and regards,
Vamsi
Vamsi-san,
Thank you for your support.
The using tool is "C2000Ware_4_01_00_00".
It is latest version.
Best regards,
Sasaki
Sasaki-san,
Thank you for the information.
I asked our tools team to have a webex meeting with you to see why your GUI operations are showing different results than that of us.
I will keep this thread in pause until we close the meeting.
Thanks and regards,
Vamsi
Hi Sasaki-san,
Until we close via meeting, please don't reply here.
Thanks and regards,
Vamsi