COPCTL loading problem at start from flash

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

COPCTL loading problem at start from flash

ソリューションへジャンプ
1,225件の閲覧回数
xak
Contributor I

I use the microcontroller S12XET256 with codewarrior 5.0.

My application run in a noised environment so I must enable the COP at start by loading the COPCTL from flash at reset.

As recommended, I use this 4 instructions to program flash NV registers:

 

const byte NVFPROT_INIT @0x0000FF0C = 0x7F; //FULL PFLASH SECURED

const byte NVEPROT_INIT @0x0000FF0D = 0xFF;

const byte NVFOPT_INIT @0x0000FF0E   = 0xF9; //COP CR[2:0]=6

const byte NVFSEC_INIT @0x0000FF0F   = 0x7D //SECURED, KEY DISABLED

 

But after start I read this by respective register and the COP, obviously, don't run:

FPROT=0x7F  (OK)

EPROT=0x7F  (wrong, should be 0x7F)

FOPT=0xFF    (wrong, should be 0xF9)

FSEC=0xFF    (wrong, should be 0x7D)

 

I try also with this settings:

 

const byte NVFPROT_INIT @0x0000FF0C = 0xFF;

const byte NVEPROT_INIT @0x0000FF0D = 0xFF;

const byte NVFOPT_INIT @0x0000FF0E   = 0xF9;

const byte NVFSEC_INIT @0x0000FF0F   = 0xFF

 

And I read this:

FPROT=0xFF (OK)

EPROT=0xFF (OK)

FOPT=0xFE  (wrong, should be 0xF9)

FSEC=0xFE  (wrong, should be 0xFF)

 

I use this funcion for another microcontroller (S12P128) without problems.

I wondering if someone has used this function with success or know the cause of problem.


Thanks in advance and best regards

ラベル(1)
0 件の賞賛
返信
1 解決策
960件の閲覧回数
kef
Specialist I

By default codewarrior debugger reprograms NVSEC with 0xFE before loading your code. This worked for older S12(X), but failes for newer parts with ECC flash. You need to following command to your ???preload.cmd file:

FLASH NOUNSECURE

Are you sure your S12P project doesn't contain this command in preload.cmd?

Also, since you are enabling security, how do you read and verify  FOPT, FSEC values? It should be not possible using debugger.

元の投稿で解決策を見る

0 件の賞賛
返信
3 返答(返信)
961件の閲覧回数
kef
Specialist I

By default codewarrior debugger reprograms NVSEC with 0xFE before loading your code. This worked for older S12(X), but failes for newer parts with ECC flash. You need to following command to your ???preload.cmd file:

FLASH NOUNSECURE

Are you sure your S12P project doesn't contain this command in preload.cmd?

Also, since you are enabling security, how do you read and verify  FOPT, FSEC values? It should be not possible using debugger.

0 件の賞賛
返信
960件の閲覧回数
xak
Contributor I

Thank you very much for the answer, it solves the problem.

I add the "FLASH NOUNSECURE" command and now the values are correct and the COP work correctly. :-)

In the first case I was able to read the registers because my application has a display and I was able to print them on it.

0 件の賞賛
返信
958件の閲覧回数
RadekS
NXP Employee
NXP Employee

Yes, Eduard has true.

Obviously ECC algorithm tries fixing corrupted data by one bit changing.

For example I will take second case:

Prior your write was data 0xFF, 0xFF, 0xFF, 0xFE (MCU unsecured)

You write 0xFF, 0xFF, 0xF9, 0xFF

In flash is after that 0xFF, 0xFF, 0xF9, 0xFE, but there ECC checksum didn’t fits and when you read data, ECC algorithm try fixing 1bit error and you get: 0xFF, 0xFF, 0xFE, 0xFE.

Problem is caused by cumulative write to the same phrase.

In attachment you can find short description of security feature at S12(X) devices.

Result behaviour depends on checksum value (of whole phrase) and therefore it is heavy predictable (sometimes it can work).

Anyway cumulative write to flash is not allowed. You should use FLASH NOUNSECURE command in preload file when you using loading code by CW.