UDS_S32K144_FlashDriver
UDS_S32K144_FlashDriver copied to clipboard
flash driver验证
@SummerFalls 作者你好:
我遇到的问题:NVM_TestFlashDriver函数执行到g_pFlashDriverAPIRAM->pfFLASH_DRV_EraseSector会导致系统崩溃(停在startup_S32K118.S DefaultISR处)。
我验证的流程:flash driver工程在注释EN_FLASH_DRIVER_DEBUG后,编译提取出flash driver hex数组,手动将flash driver hex数据放至flash driver工程g_flashDriverRAM数组中,再编译进行调试。
请问编译提取出的flash driver hex数组不能用这种方式在flash driver工程进行有效性验证吗?
谢谢!
时间有点久远了,我记得编译提取之前,需要注释“EN_FLASH_DRIVER_DEBUG”,而编译提取出来的bin文件,通过J-Flash复制出来后,填充到g_flashDriverRAM数组,之后需要重新打开“EN_FLASH_DRIVER_DEBUG”这个宏定义,以用来调试验证你提取的这个Driver有效性。
------------------ Original ------------------ From: "SummerFalls/UDS_S32K144_FlashDriver" @.>; Date: Thu, Dec 7, 2023 03:49 PM @.>; @.@.>; Subject: [SummerFalls/UDS_S32K144_FlashDriver] flash driver验证 (Issue #2)
@SummerFalls 作者你好:
我遇到的问题:NVM_TestFlashDriver函数执行到g_pFlashDriverAPIRAM->pfFLASH_DRV_EraseSector会导致系统崩溃(停在startup_S32K118.S DefaultISR处)。
我验证的流程:flash driver工程在注释EN_FLASH_DRIVER_DEBUG后,编译提取出flash driver hex数组,手动将flash driver hex数据放至flash driver工程g_flashDriverRAM数组中,再编译进行调试。
请问编译提取出的flash driver hex数组不能用这种方式在flash driver工程进行有效性验证吗?
谢谢!
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>
午夜迷航。 @.***
@SummerFalls 感谢回复!
若填充了g_flashDriverRAM数组,重新打开“EN_FLASH_DRIVER_DEBUG”这个宏定义,根据代码逻辑,会调用到原本的正常函数,就不是用数组函数了,代码段如下: #ifdef EN_FLASH_DRIVER_DEBUG /* TODO S32K_FlashDrv: #06 This macro is in the header file: flash_driver.h */ g_pFlashDriverAPIRAM = (tFlashDriverAPIInfo *)g_flashDriverRAM; g_pFlashDriverAPIRAM->pfFLASH_DRV_EraseSector = FLASH_DRV_EraseSector; g_pFlashDriverAPIRAM->pfFLASH_DRV_VerifySection = FLASH_DRV_VerifySection; g_pFlashDriverAPIRAM->pfFLASH_DRV_Program = FLASH_DRV_Program; g_pFlashDriverAPIRAM->pfFLASH_DRV_ProgramCheck = FLASH_DRV_ProgramCheck; #else g_pFlashDriverAPIRAM = (tFlashDriverAPIInfo *)g_flashDriverRAM; g_pFlashDriverAPIRAM->pfFLASH_DRV_EraseSector = (tpfFLASH_DRV_EraseSector) ((uint32_t)g_flashDriverRAM + (uint32_t)(g_pFlashDriverAPIRAM->pfFLASH_DRV_EraseSector)); g_pFlashDriverAPIRAM->pfFLASH_DRV_VerifySection = (tpfFLASH_DRV_VerifySection) ((uint32_t)g_flashDriverRAM + (uint32_t)(g_pFlashDriverAPIRAM->pfFLASH_DRV_VerifySection)); g_pFlashDriverAPIRAM->pfFLASH_DRV_Program = (tpfFLASH_DRV_Program) ((uint32_t)g_flashDriverRAM + (uint32_t)(g_pFlashDriverAPIRAM->pfFLASH_DRV_Program)); g_pFlashDriverAPIRAM->pfFLASH_DRV_ProgramCheck = (tpfFLASH_DRV_ProgramCheck) ((uint32_t)g_flashDriverRAM + (uint32_t)(g_pFlashDriverAPIRAM->pfFLASH_DRV_ProgramCheck)); #endif
OK,记忆有偏差。你提取的bin文件的数组前几行数据能贴一下吗
@SummerFalls 可以,从提取内容来看,至少表头看起来是有了的。 0x11, 0x00, 0x00, 0x00, 0x9D, 0x01, 0x00, 0x00, 0x11, 0x03, 0x00, 0x00, 0xC9, 0x04, 0x00, 0x00, 0x80, 0xB5, 0x88, 0xB0, 0x00, 0xAF, 0xF8, 0x60, 0xB9, 0x60, 0x7A, 0x60, 0xFB, 0x68, 0x5A, 0x1E, 0x93, 0x41, 0xDB, 0xB2, 0x18, 0x00, 0xF0, 0xF7, 0xD5, 0xFC, 0x12, 0x23, 0xFB, 0x18, 0x00, 0x22, 0x1A, 0x80, 0x7B, 0x68, 0xBB, 0x61, 0xFB, 0x68, 0x9B, 0x68, 0x7B, 0x61, 0xBA, 0x68, 0x7B, 0x69, 0x9A, 0x42, 0x1B, 0xD3, 0xFB, 0x68, 0xDA, 0x68, 0x7B, 0x69, 0xD2, 0x18, 0xBB, 0x68, 0x9A, 0x42, 0x14, 0xD9, 0xBB, 0x68, 0x07, 0x22, 0x13, 0x40, 0x5A, 0x42, 0x53, 0x41, 0xDB, 0xB2, 0x18, 0x00, 0xF0, 0xF7, 0xB8, 0xFC, 0xBA, 0x68, 0x7B, 0x69, 0xD3, 0x1A, 0x80, 0x22, 0x12, 0x04, 0x94, 0x46, ... ... ... ...
你导出的函数,从第二个函数开始的相对地址跟我的118工程不太一样,可能你有步骤遗漏吧,比如从 144 迁移到 118 时, flash_driver.c
的代码你有没有做相应处理。
@SummerFalls Modified Source Files:
-
- NVM_Flash.h
-
- NVM_Flash.c
-
- flash_driver.h
-
- flash_driver.c
-
- S32K144_64_flash.ld(实际使用的S32K118)
根据你的注释,除了linker文件以外,其余都是直接拷贝git flash driver工程中的文件。包括main,c。
函数的相对地址和你生成的确实不一样,会不会是118和144的平台差异呢?还是说只要函数内容一致的话,这里hex数组的大小和内容就应该是一致的?这一点也是我比较疑惑的。
不建议直接拷贝和覆盖。
@SummerFalls
你提到过144和118测试过都能支持,那你有没有印象,这两个平台编译出来的flash driver hex是一致的吗?
不一致。
感谢,我再继续定位定位
@SummerFalls 方不方便借鉴下你的S32K118的flash driver工程?
S32K118 工程只提供最新的代码,并不免费提供。但是本仓库免费。
@SummerFalls 好的,S32K118怎么收费的,想了解下。