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.

C6745的FLASH烧写问题,提示擦除失败,追踪了程序的运行发现......

Other Parts Discussed in Thread: OMAP-L137

下载了OMAP-L137_FlashAndBootUtils_2_40.tar,用CCS5.5打开SPIWriter_DSP并转换成新版本,设置相关选项并修改了源文件中SPI号和FLASH的容量参数后进行编译:

首先出现了3个错误,是修改项目配置后CCS自动添加了一个c6745.cmd的文件与项目自带的SPIWriter_DSP.CMD冲突导致,删除c6745.cmd后错误消失;

然后还有11个警告,如图

没有下载到6745的CSL于是暂时忽略,尝试直接运行,

打开文件正常,擦除失败了

于是追踪了程序的运行,发现........

在SPI_MEM_open的时候,hSPIMemInfo这个结构体指针赋值异常.....这部分代码如下,

if (hDEVICE_SPI_MEM_params != NULL)
{
hSPIMemInfo->hMemParams = hDEVICE_SPI_MEM_params;
}

运行时该判断语句为true已经执行了赋值语句....然而.......

由于这个指针内的内容异常导致在进行SPI_MEM_eraseBytes时无法读取到SPI接口存储器的类型而导致跳过擦除程序的执行

下面这段代码是SPI_MEM_eraseBytes函数中的一部分,

else if (hSPIMemInfo->hMemParams->memType == SPI_MEM_TYPE_FLASH)
{

// Do bulk (chip) erase if appropriate
if ( hSPIMemInfo->hMemParams->memorySize != 0 )
{
if ( ( bytesLeft >= hSPIMemInfo->hMemParams->memorySize ) ||
( (hSPIMemInfo->hMemParams->blockSize == 0) && (hSPIMemInfo->hMemParams->sectorSize == 0) ) )
{
// Do chip erase
//DEBUG_printString( "Doing bulk chip erase.\r\n");
LOCAL_SPIFlash_bulkErase(hSPIMemInfo);
//DEBUG_printString( "Finished bulk chip erase.\r\n");
return E_PASS;
}
}

是什么导致了赋值不成功,是项目配置有问题么.....

这个SPIWriter如果用于C6745的话应该做哪些配置呢