TraveoII Non-Blocking Flash write

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

参考SDL7.3 :T2G_Sample_Driver_Library_7.3.0\tviibe1m\src\examples\flash\code\cm0_cm4_non_blocking 文件夹下示例验证non-blocking 操作flash;

有如下疑问,请帮忙解答:

在调用Cy_FlashInit时,虽然是初始化non-blocking模式,

但在后续Cy_FlashWriteCode()函数里,在调用Cy_Flash_ProgramRow之前初始化参数时,

programRowConfig.blocking仍是按blocking模式进行设置,那最终program还是blocking啊

这个地方为什么要做这样的配置呢?

chme_4646286_0-1655196085903.png

另:TraveoII中Flash Macro的数量有多少呢?TRM手册或代码中都没有体现?

 

0 Likes
1 Solution
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi chme_4646286,

对于您的 test.zip 示例代码,我们已经在我们的板上进行了测试,我们也遇到了hardfault ,并且在调用 api 'Cy_Flash_EraseSector()' 时错误代码为 (0xF00000A7),但我们很少会如此频繁地执行擦除code flash。
发生硬故障时,我可以知道您的错误代码是什么吗?您可以在 api 'Cy_Srom_ConvertRespToStatus()' 中检查 'resp0' 的状态。

Alfred_Tsang_0-1655372891748.pngAlfred_Tsang_1-1655372916869.png

 

根据我们的理解,timer中断可以在core m0 或 m4 中设置,并且不应影响blocking和non-blocking模式下的闪存操作。我们认为hardfault可能不是由中断引起的。
“non-blocking”与“blocking”与 IPC 发布通知的交互有关:
- 在“blocking”的情况下,它将轮询直到 Cy_IPC_Drv_IsLockAcquired() 返回“false”
- 在“non-blocking”情况下,它使用 IPC 中断来通知“release",然后轮询 Cy_Is_SROM_API_Completed() 中的标志 ('g_completeFlag'),该标志在 Cy_FlashHandler() 服务例程中设置。

我们没有找到任何有关 Flash macro的可共享文档。

Thanks,

View solution in original post

0 Likes
9 Replies
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi chme_4646286,

The blocking and the non-blocking由 SROM API 调用内容决定(Cy_Srom_CallApi() 和 Cy_Srom_CallApi_NonBlock())
The non-blocking是指CM4是non-blocking的,CM0+在系统调用中是blocking的。
更多细节请参考 TRM 33.4.14 ProgramRow 部分中的 SROM API

此外,在non-blocking示例中,您可以检查 Cy_Flash_CallSromApiForFlashWrite。
对于non-blocking用例,SROM API 参数使用blocking;和Driver block mode使用non-blocking

Alfred_Tsang_0-1655263652745.png

 

由于 CM4 不能直接使用 SROM API (system call。 CM4 使用 IPC 请求 CM0+ 执行系统调用。
CM4 non-blocking指的是这个过程(无需等待IPC1通道释放)。用户需要通过“Cy_Is_SROM_API_Completed”检查请求是否完成。
因此在 CM4 blocking示例中,CM4 在离开呼叫之前等待 IPC1 通道释放(i.e. CM4 blocking)。
详情请参考 AN220242。
https://www.infineon.com/dgdl/Infineon-AN220242_Flash_Accessing_Procedure_for_Traveo_II_Family-Appli...

我可以知道你想知道Flash macro的数量的原因吗?对于设备规格,您可能需要参考 DS。

Alfred_Tsang_1-1655263668075.jpeg

Thanks

0 Likes
lock attach
Attachments are accessible only for community members.
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

Hi  Alfred_Tsang;

感谢你的答复;

对于flash blocking和non-blocking模式,还有一点疑问,烦请帮忙解答下;

上述两种模式对其他中断的影响,例如定时器中断;

按照blocking模式的特点,CM4在调用flash接口函数时,需要把其他的中断函数关掉,结束调用时在把对应的中断函数开启;不关闭中断会频繁触发hardfault错误,附件代码是针对该情况的验证;

non-blocking模式,原本我的理解是flash操作时可以响应其他中断;但按照上述你的解答,CM4是non-blocking,但CM0仍是blcoking;因此,CM4在non-blocking时,仍需关闭其他使用的中断函数,否则会引发hardfualt;

那是不是可以认为TraveoII系列在操作flash时,都需要把其他使用中的中断关闭掉?

另,关于Flash macro的问题,是因为我在使用PSoC系列MCU时,其提供的Program Flash接口函数中明确给了Flash macro的参数定义,所以以此类推,TraveoII系列应该也是同样的操作方式,所以我对Flash macro比较关注;

0 Likes
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi chme_4646286,

对于您的 test.zip 示例代码,我们已经在我们的板上进行了测试,我们也遇到了hardfault ,并且在调用 api 'Cy_Flash_EraseSector()' 时错误代码为 (0xF00000A7),但我们很少会如此频繁地执行擦除code flash。
发生硬故障时,我可以知道您的错误代码是什么吗?您可以在 api 'Cy_Srom_ConvertRespToStatus()' 中检查 'resp0' 的状态。

Alfred_Tsang_0-1655372891748.pngAlfred_Tsang_1-1655372916869.png

 

根据我们的理解,timer中断可以在core m0 或 m4 中设置,并且不应影响blocking和non-blocking模式下的闪存操作。我们认为hardfault可能不是由中断引起的。
“non-blocking”与“blocking”与 IPC 发布通知的交互有关:
- 在“blocking”的情况下,它将轮询直到 Cy_IPC_Drv_IsLockAcquired() 返回“false”
- 在“non-blocking”情况下,它使用 IPC 中断来通知“release",然后轮询 Cy_Is_SROM_API_Completed() 中的标志 ('g_completeFlag'),该标志在 Cy_FlashHandler() 服务例程中设置。

我们没有找到任何有关 Flash macro的可共享文档。

Thanks,

0 Likes
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

Hi  Alfred_Tsang;

示例中频繁地执行擦除code flash,只是为了复现此问题;

该问题实际是我同事在调试应用代码时发现的,后来我们不断精简代码,然后基于SDL示例按最小环境验证,此流程是可以快速稳定的复现问题现象的;

关于Cy_Srom_ConvertRespToStatus()接口,请问要如何调用呢?我在Cy_Srom_ConvertRespToStatus函数的Error code分支打断点调试,启动debug后该断点就移位了,我的编译环境是IAR9.10.

0 Likes
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi chme_4646286,

好的,昨天我们在使用 GHS 编译器。
对于 调试 api Cy_Srom_ConvertRespToStatus()在IAR,您可以将断点设置在 'else if((resp0 & 0xF0000000ul) == 0xF0000000ul)' 并参考下面的截图,我们的编译器环境是 IAR8.42.1。

 

Alfred_Tsang_2-1655453751043.png

 

Thanks,

0 Likes
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

Hi  Alfred_Tsang;

感谢指点,按照你所述的方法,可以设置断点;

但我这边多次验证,现象跟你不太一样,我这边并没有跑到Cy_Srom_ConvertRespToStatus()错误分支流程,出错时直接跳到HardFault_Handler();

chme_4646286_1-1655463377018.png

我是基于CYTVII-B-E-1M-SK上验证的;

我和同事在多测几种情况,看看是不是有错误码返回;

如果你有其他测试建议,烦请告知,非常感谢指点~~

 

0 Likes
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

Hi  Alfred_Tsang;

我和同事分别验证了多次,得到的结果是一致的;出错的时候resps的code码没有报错,直接进入到HardFault_Handler();

chme_4646286_0-1655888015383.png

 

我这边注意到你复现问题使用的环境是CYT2B9,能麻烦你再CYTVII-B-E-1M-SK(CYT2B7)这个最小系统板上验证下这个流程吗?我怀疑是不是有芯片的差异性问题?

0 Likes
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi chme_4646286,

明白, 我们刚刚在 CYT2B7 rev.C 板上运行了测试,我们运行了大约 5 分钟的代码,我们没有发现任hardfault。

Alfred_Tsang_1-1655892040870.png

你这边可以试在其他sector上运行测试或其他板子上尝试测试, 看看是否有hardfault。
对于code flash,我们认为可能不支持在同一段中连续的擦除和写入same section的内存。

Alfred_Tsang_0-1655891928959.png

Thanks,

0 Likes
chme_4646286
Level 4
Level 4
Distributor - Intron(GC)
100 sign-ins First comment on blog 50 sign-ins

Hi  Alfred_Tsang;

按照你的建议,我把示例中Blocking wirte函数中的擦除次数减少后,的确没有发送Hardfault的错误;

我再多测几次其他流程,看看是否还有其他不同的结果;

非常感谢你的耐心解答,谢谢~~

0 Likes