下载了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的话应该做哪些配置呢