请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2640 工具/软件:TI-RTOS
您好!
我将 CC2640连接到16Mbit 闪存(S25FL116K0XNF)、并尝试从其写入和读取数据。 所有 SPI_TRANSFER 调用返回 true、并且传输状态字段为 SPI_TRANSACTION _COMPLETE 、但接收缓冲区未被填充。
以下是初始化代码:
大家好、 我有一个 CC2640连接到16Mbit 闪存(S25FL116K0XNF)、我正在尝试从该存储器中写入和读取数据。 所有 SPI_TRANSFER 调用返回 true、但接收缓冲区未被填充。 我正在使用阻塞模式、并且启用了 SPI。 以下是初始化代码:
void memoryOpen (){ SPI_Params params; SPI_Params_init (¶ms); params.bitrate = 1000000; params.frameFormat = SPI_POL1_PHA1; params.mode = SPI_MASTER; spiHandle = SPI_open (Board_SPI0、¶ms); }
要写入存储器的代码:
bmemoryWriteData (PIN_Handle pinHandle、char *数据、int 大小、int 地址){ char send[MAX_MEM_SIZE+4]; char receiv[MAX_MEM_SIZE]; SPI_Transaction transaction; //写入数据02h + 3字节地址+数据 发送[0]= 0x02; send[1]=地址和0xF0+ 数据发送0xF0+地址;pin3 = 0xF0F0+地址= 0xF0+数据发送0xF0+地址= 0xF0+地址= 0xF0Pin = 0xF0Pin =地址;SEND =地址= 0xF0+地址= 0xF0PLE[END[END]; FLASH_CS、TRUE); transaction.count = 4 + size; transaction.txBuf = send; transaction.rxBuf = receive;//此处也尝试了 NULL bool 结果= SPI_transfer (spiHandle、&transaction); PIN_setOutputValue (pinHandle、flash_CS、false); 返回结果; }
以及从存储器读取的非常相似的代码:
bool memoryReadData (PIN_Handle pinHandle、char *数据、int 大小、int 地址){ char send[MAX_MEM_SIZE]; char receiv[MAX_MEM_SIZE]; SPI_Transaction 事务; bool 结果; PIN_setOutputValue (pinHandle、 FLASH_CS、TRUE); //命令03h + 3字节地址 SENSE[0]= 0x03; SENSE[1]=地址和0xF00; SENSE[2]=地址和0x0F0; SENSE[3]=地址和0x00F; transaction.count =大小;//假设大小> 4 transaction.Butxf =发送; transaction.Buf =接收;rxBuf =接收; //这不包含 SPI_transfer 调用 结果= SPI_transfer (spiHandle、&transaction); PIN_setOutputValue (pinHandle、flash_CS、false)之后的任何数据; memcpy (data、(char*) transaction.rxBuf、size); 返回结果; }
因此、基本上我将按顺序调用上述3个调用、并检查读取的数据与写入的数据相同、而不是。
有几个问题、希望有人可以帮助:
1.我假设将 count 设置为要发送或接收的数据的较大值是正确的?
2.是设置 SPI 所需的任何其他操作,而不是调用 Board_initSPI()。
3.是否需要在引脚表配置中设置 SPI 引脚? (我已更改 board.h、因此 Board_SPI0_XXX 值正确)。
我还将其添加到了.cfg 文件中:
TIRTOS.useSPI = true; var hwiParams = new halHwi.Params (); hwiParams.instance.name ="dmaISR"; Program.global.dmaISR = halHwi.create (50、"&SPIisrDMA"、hwiParams);
这到 board.c 中:
void SPIisrDMA (UARg arg) { SPI_serviceISR ((SPI_Handle)&(SPI_CONFIG[0])); }
我还尝试了回调模式、回调函数会被调用。
我是否错过了什么?
谢谢、
Justin