Strictly necessary cookies are on by default and cannot be turned off. Functional, Performance and Tracking/targeting/sharing cookies can be turned on below based on your preferences (this banner will remain available for you to accept cookies). You may change your cookie settings by deleting cookies from your browser. Then this banner will appear again. You can learn more details about cookies HERE.
Strictly necessary (always on)
Functional, Performance and Tracking/targeting/sharing (default off)
We (ProMik GmbH) are a provider for flashing stations and flashing tools. For one of our customers we need to implement a driver that is capable of erasing and flashing data into the flashes of a traveo II device (here: CYT2B98CAAES). The verification of a successful flashing should be done via different margin modes.
We are able to catch the MCU when the device is powering up. Via DAP we are putting our bootloader into SRAM and let it run (on the application core - Cortex M4). We are using IPC for the syscalls which are described in the technical reference manual and in the programming spec.
Using the syscalls, we are able to gather all of the device's IDs (e.g. family ID, revision ID, etc.), blankchecking workflash, erasing sectors or all the cflash, and programming data into code flash and work flash.
Yet, when we want to verify the programmed data, we are running into problems.
We have implemented two different verification methods. One is doing a checksum compare, the other one is a data compare.
Both methods are working perfectly fine when not entering margin mode.
Even when calling "exit margin mode" routine beforehand, we are not having any troubles.
But, when we want to enter margin mode problems arise.
1) Data read do not match data written beforehand
2) When calling any other syscall after entering margin mode, our bootloader is not responding anymore. Exchanging data via DAP is still possible, but the application core is not responding anymore.
If we do not receive a response from the core anymore and readout the IPC_INT_STRUCT afterwards, we see values, that are not set, when a syscall is successful.
(in error state, IPC_INTR, IPC_INTR_SET, IPC_INTR_MASKED show 0x00000200 and IPC_INTR_MASK has the value 0x00000700)
(if everything runs OK, IPC_INTR, IPC_INTR_SET, IPC_INTR_MASKED show 0x00000000 and IPC_INTR_MASK has the value 0x00000700)
We have tested with several different combinations of parameters (e.g. DCS_TRIM_EN = 0, RD_REG_TRIM = 0, RD_REG_EN = 0), yet we encounter the same behaviour.
Where can we find additional information about the parameters?
Are we missing any prerequisities? Before entering margin mode?