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.

C6748 (lcdk) 仿真正确 烧写到nand flash之后出错

我使用的是lcdk c6748的板子,利用其spi1口读取ad的数据。在仿真的时候可以成功读取(仿真器是xds100v2),将代码烧到nand flash中后,调试发现出错。感觉spi_somi能够读入数据,但是读入的数据都是错误的,呈现出的周期性。烧写过程我参考的是BIOS C6SDK 2. 0 User Guide,对比了一下其他的烧写方法,发现也是一致的。我使用的cmd文件是startware自带的c6748.cmd。

我有如下几个问题:

1. 烧写到nand flash中的程序可以使用仿真器进行调试么?如果可以的话,具体应该怎么操作?如果不可以的话,如何排查烧写进去的程序的问题?

2. 出错的可能原因是什么?在不能连接仿真器调试的情况下,我完全不知道应该怎么查错?

3. 在C6SDK\pdk_C6748_2_0_0_0\C6748_StarterWare_1_20_03_03\tools\flash_writer\ 有两个烧写的程序,具体这两个程序是干什么用的,有详细一点的说明么?

4. 烧写过程中gel文件是否起到一定的作用,有关系么?

谢谢。

以下是我的程序,前面没有任何的配置的部分:

#include <string.h>
#include "soc_C6748.h"
#include "hw_psc_C6748.h"
#include "lcdkC6748.h"
#include "uart.h"
#include "spi.h"
#include "psc.h"
#include "interrupt.h"
#include "uartStdio.h"

//#include "rk6748_timer.h"

#include "stdlib.h"

/******************************************************************************
** INTERNAL MACRO DEFINITIONS
*******************************************************************************/
/* value to configure SMIO,SOMI,CLK and CS pin as functional pin */
#define SIMO_SOMI_CLK_CS 0x00000E02
#define CHAR_LENGTH 0x10

#define Uint32 unsigned int
#define Uint16 unsigned short
#define Uint8 unsigned char

#define SETBIT(dest,mask) (dest |= mask)
#define CLRBIT(dest,mask) (dest &= ~mask)
#define TGLBIT(dest,mask) (dest ^= mask)
#define CHKBIT(dest,mask) (dest & mask)

#define HWREG(x) \
(*((volatile unsigned int *)(x)))

/******************************************************************************
** INTERNAL FUNCTION PROTOTYPES
*******************************************************************************/
static void ***(unsigned int dataFormat);
static void SpiTransfer(unsigned int p_rx_count);
static void SetUpSPI(void);

static void SetUpGPIO1_4(void);

/******************************************************************************
** INTERNAL VARIABLE DEFINITIONS
*******************************************************************************/
const unsigned int t_num=13200;

volatile unsigned int flag = 1;
unsigned int tx_len=0;
unsigned int rx_len=0;
unsigned char vrf_data[260];
volatile Uint16 tx_data[6];
volatile Uint16 rx_data[31200];
volatile Uint16 *p_tx;
volatile Uint16 *p_rx;
volatile unsigned char StatusResponseMessage[16];

unsigned int p_rx_count=0;

int i=0;
int j=0;

unsigned char cs = 0x02;

/******************************************************************************
** INTERNAL FUNCTION DEFINITIONS
*******************************************************************************/
int main(void)
{
/* Waking up the SPI1 instance. */
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_SPI1, PSC_POWERDOMAIN_ALWAYS_ON,
PSC_MDCTL_NEXT_ENABLE);

/* Initializing the UART instance for serial communication. */
UARTStdioInit();

UARTPuts("Just started.\r\n\r\n", -1);

/* Performing the Pin Multiplexing for SPI1. */
SPIPinMuxSetup(1); // SPI1也是被复用的一部分,需要参看pinmux5寄存器

/*
** Using the Chip Select(CS) 0 pin of SPI1 to communicate with the Fingerprint Sensor.
*/
SPI1CSPinMuxSetup(1); // 参看pinmux4寄存器 SPI1_SCSn_1

/* Configuring and enabling the SPI1 instance. */

SetUpSPI();

/* 以下测试代码 */

SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs);

SetUpGPIO1_4();

tx_data[0] = 0x7e01; // 具体查看数据手册,31位表示是否启用c通道
tx_data[1] = 0x03ff;
tx_data[2] = 0x0000;
tx_data[3] = 0x0000;
tx_data[4] = 0x0000;
tx_data[5] = 0x0000;

tx_len = 6;
p_tx = &tx_data[0];
p_rx = &rx_data[0];


for (i=0;i<t_num/6;i++)
{
(*((volatile unsigned long *)(0x01e26014)))=\
(*((volatile unsigned long *)(0x01e26014))) | (0x00100000); //将gpio1_4设置为输出高电平 1

SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs);

for(tx_len;tx_len>0;tx_len--)
{
if(1 == (((*((volatile unsigned long *)(0x01F0E010))) & (0x00000200))>>9)) //传输是空的
{
SPITransmitData1(SOC_SPI_1_REGS, *p_tx); // 此时传输数据
p_tx++;

*p_rx = (Uint16)SPIDataReceive(SOC_SPI_1_REGS);
p_rx++;
}
}


SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, cs);

(*((volatile unsigned long *)(0x01e26014)))=\
(*((volatile unsigned long *)(0x01e26014))) & (0xffefffff); //将gpio1_4设置为输出低电平 0


tx_len = 6;
p_tx = &tx_data[0];

// i++;


}

for (i=0;i<t_num; i++)
{
UARTPutNum(tx_data[i]);
for(j=0;j<4000;j++);
UARTPuts(" ",-1);
for(j=0;j<4000;j++);
}

while(1);

/* 以上测试代码 */

}

x 出现错误。请重试或与管理员联系。