主题中讨论的其他器件: CC2642R
工具与软件:
下午好、
我将在 cc2642上部署备份工厂映像。
我想将一个 OAD 工厂映像保存到外部闪存中。
我只能从地址0x00读取。
然后、我最终会生成一个 error_spin。
我是否必须在某处转换某个位、因为它是受保护的存储器?
带适用于 MX25的 NVS 驱动程序的 OAD 出厂映像确实可以工作
谁可以帮助我
代码如下所述
------------------
spiflash.c
int8_t spiflash_Write (uint32_t addr、void*buffer、size_t buffersize)
{
uint8_t * srcBuf;
size_t lenBuf、lenWrite、lenDone;
uint8_t wbuf[4];
int8_t status = true;
int retval = 0;
/*验证地址和长度*/
//if (offset + buffersize > hwAttrs->regionSize)
//{
//返回(NVS_STATUS_INV_OFFSET);
//}
srcBuf =缓冲器;
lenBuf =缓冲器大小;
长度= 0;
while (lenBuf > 0)
{
/*等待前一个擦除/编程操作完成*/
int8_t ret = spiflash_waitReady ();
IF (RET)
{
状态= false;
中断;
}
REt = spiflash_command (CMD_WREN);
IF (RET)
{
状态= false;
中断;
}
wbuf[0]= CMD_PP;
wbuf[1]=((addr + lenDone)>> 16)和0xff;
wbuf[2]=((addr + lenDone)>> 8)& 0xff;
wbuf[3]=(addr + lenDone)& 0xff;
lenWrite = SPIFLASH_program_page_size -((addr + lenDone)% SPIFLASH_program_page_size);
if (lenBuf < lenWrite)
{
lenWrite = lenBuf;
}
spriflashAssert();
如果(spiflash_write (wbuf、sizeof (wbuf))!= 0)
{
状态= false;
中断;
}
如果(spiflash_write (srcBuf、lenWrite)!= 0)
{
状态= false;
中断;
}
spiflashDeassert();
srcBuf += lenWrite;
lenDone += lenWrite;
lenBuf—= lenWrite;
}
if (status == false)
{
RetVal =-1;
}
返回(返修);
}
静态 int8_t spiflash_write (const uint8_t * data、size_t length)
{
返回(fxP457->write(buffer, Spi_Flash buffersize);
}
------------------
SPI.c
静态 int8_t spi0_write (const uint8_t * data、size_t length)
{
SPI_Transaction spiTransaction;
spiTransaction.rxBuf = NULL;
/*解决 SPI 从地址0x0传输的问题,从本地缓冲区传输第一个字节*/
IF (DATA = NULL)
{
uint8_t byte0 =*数据;
spiTransaction.count = 1;
spiTransaction.txBuf =(void *)&byte0;
如果(! SPI_TRANSMIT (spiHandle、&spiTransaction)
{
WARNS_SET (SPI_FAILED);
返回 SPI_ERROR;
}
Data++;
长度--;
如果(长度=0)
{
返回 spi_suces;
}
}
spiTransaction.count =长度;
spiTransaction.txBuf =(void *) data;
if (! SPI_TRANSMIT (spiHandle、&spiTransaction)
{
WARNS_SET (SPI_FAILED);
返回 SPI_ERROR;
}
返回 spi_suces;
}