完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我正在用PIC24FJ64 GA02进行FLASSST25VF010A模块的接口。代码取自Microchip的样本代码。我对Flash的阅读和写作有两个功能。我能够把数据发送到Flash,但是在读取数据时,我发现有些值被误读了。我已经将RDYDATA和WRY数据声明为浮点数据类型的两个数组。我将显示我正在读取时得到的值以及我正在使用的函数.WR_data[0] 230 RD_data[0] 0WR_data[1] 231.46 RD_data[1] 231WR_data[2] 1234 RD_data[2] 210WR_data[3] 233 RD_data[3] 233WR_data[4] 260 RD_data[4]。4]4WR_data[5]235WR_数据[5]235WR_RD_数据[5]235WR_数据[5][5]235WR_数据[5][5]235RD_RD_数据235RD_RD_数据235RD_RD_数据[5]235WR_数据[5]235WR_数据235WR_数据235WR_数据235WR_数据[6]235WR_235WR_数据235WR_数据235WR_数据235WR_数据235WR_数据235WR_数据[6][6][6][6]235235RD 235 RD 235WR_数据235RD 236WR_数据236RD RD_data[10]240WR_data[11]257RDYDATA(11)255从数据中可以看到1234读取为210, 260被读取为4。257的读数为255。我无法重新组织正在接收的值的随机性,因为我能够读取输入的8/12值。//**************************************************************************************************//函数以写一个阵列以闪烁SPIFlashWriteArray(float*vData,uint16_t wLen){float i;uint8_t vOpcode;bool isStarted;if(wLen==0u)//Check数组中是否存在数据(数组长度-wLen)返回;/*在使用*/if((dwWriteAddr&0x01)&&wLen)//检查地址是否为奇数。SPIFlashWrite(*VDATA);VDAT++;WOPCODE=WrdEyWord流;ISDART=FALSE;而(WLN & Gt;1){ WaWITHeIsBuy();如果((DWWRADEADDR和SPILFLASH SCORTHORION FIX)=0)/ /检查地址是否是SECTROV SPIFASHELSEDER(DWWRESEADDR)的开始;地址!{SpIFLASH.CSYIO=0;SPI1HASH-CSYIO=1;if(DeVeCopAs.ButoByByTeSt流)VopCeDe= WraveByTeTySoad;否则,(DeVeCeCop.BIT.BPGEAGE程序){(WLEN)SPIFLASHWORD(*VDAT++);返回;} SPIFLASHH-CSYIO=0;SPI1L传输(VopCODE);SPI1L传输((浮标*)和;DR)〔2〕;SPI1a转移((浮点*);DWWRADEADDR)[S]((浮点*);DWWRADEADDR)〔0〕;Is{SpIFlasHiScIIO=0;SPI1L传输(VopCo码);}为(i=0;i=DeVeCavaS.ButsErrWord流;I++){SPI1L传输(*VDAT++);DWWRADEADDR++;WLEN -;} SPIFLAS;文字书写H_CS_IO=1;如果((dwWWriteAddr&;SPI_FLASH_SECTOR_SECTOR_MASK)SPI_SPI_FLASH_FLASH_SECTOR_MASK==0) ==0) ==0) {__WaitWhitWhileWhileBusy((dwWWWWWWWWWWWWWWWWWWWXAddAdrAddrAddr_AddrAddrAddrAddr&SPIFLASH_CS_FLFL_FLFLFL_FL_FL_FLFL_SE_SE_SESESE_SE_SE_SE_SESESESESE_SE_SESESEwLen)SPIFlashWrite(*vData);}/*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************th==0)返回SPIFLASH_CS_IO_SPIFLASH_CS_CS_IO=0;spi1_传输(READ);spi1_传输((((浮动*)&_;dwAdAdAdAdAdAdAd地址)[2]];spi1_传输(((浮动**)&*)&dwIFLASH_CS_CS_CS;1][1]];spi1];spi1_传输((((浮动***)&*&*)&;dwAdAdAd地址)[0]);spi1_transfer 1_.(((SPSPSPIF1_.(((浮动((浮****)&*)&*)&*}/****************************************************************************************************************************************************************************************//SPI TRANSFER FUNCtiONfloat spi1_.(float data_to_send){float._data=0;//用于存储先前值的变量如果设置了传输缓冲区{//if溢出标志,则在传输开始之前清除if(SPI2STATbits.SPIROV){SPI2STATbits.SPIROV=0;}}.(SPI2STATbits.SPIROV);//等待直到传输完成,同时(SPI2STATbits.SPITBF);//在从ADE接收数据之前清除缓冲区中的数据._data=SPI2BUF;SPI2BUF=data_to_send;//放置要发送到传输缓冲区的数据//等待接收完成。SPI2STATbits.SPIRBF)返回SPI2BUF;}/************************************************************************我试图调试代码,但是找不到错误。如果有人发现代码中缺少任何东西,一定要启发我。如果你让我知道,我会上传代码的任何部分。我刚刚把读写功能添加到Flash中。这是网站上的微芯片样本代码,谢谢。
|
|
相关推荐
8个回答
|
|
|
正如达里奥提到的,你的结果正是我所期望的。闪存芯片中的每个位置都是一个8位字节。您不能将整个浮点数字存储到一个字节中。如何将较大的值存储到闪存中取决于您。
|
|
|
|
|
|
但是下面的值是什么:WRYDATA(0)230 RDYDATA(0)0WRYDATA(11)257 RDYDATA(0)255这些值与您的解释不一致。此外,根据前面提到的,我必须将LSB和MSB存储为两个单独的字节,然后我将不得不将它们组合成浮标。NG点值。我只是想确认逻辑是否正确。
|
|
|
|
|
|
首先,您应该停止在代码中所有不适当的地方使用float。例如,spi1_transfer应该接受并返回无符号字符,而不是float。您知道float值实际上是4个字节吗?(32位)
|
|
|
|
|
|
我对它们没有快速解释,但我同意Ric的说法:您正在向Eprom“不知何故”发送32位浮点数,就像3字节一样。所以,任何事情都可能发生…
|
|
|
|
|
|
谢谢荒山亮和达里奥,这是数据类型的问题。我能够正确地与闪存接口,并相应地读取值。是代码中的一个小问题。
|
|
|
|
|
|
我有一个字节程序的问题,我不能写到指定的内存位置。但我观察到的是,当我从AdvsReS000和00000 1H读取时,我能够分别读取DATFFH和49小时。这意味着它正确地读取制造商ID和设备ID。谁能告诉我WiRTE功能有什么问题?****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ID 0x90void NVMRead(uint8_t*dest,uint32_t aduint16_t计数){EE_nCS=0;EESPIPut(SPI_READ);EESPIPut(加法器>_;>;16);EESPIPut(加法器>_>8;gt>;8);EESPIPut(加法器>;8);EESPIPut(加法器);EESPIPut(加法器);(计数>;0){*dest++++=EESPIGet(){*dest+=EESPIGet+=EE 16 t 16_t 16_t 16 t计数();计数--}}}.}.{.}.}EE EE EE EE EE_nCS_nCS t count){uint8_tPage.=0;EEPROM_NEXT_PAGE:do{EE_nCS=0;EESPIPut(SPI_RD_STATUS);Page.=EESPIGet();EE_计数器=1;EE_nCS=EESPSPSPIGet();EE_EE=EE=EE=EE=EE_nCS=0;EE SPI_RD_RD_STA_STA_STA_STATUS();Page计数器=1;EE_nCS=EE=EE=EE=EESPSPSPSPIGet();EE=EE=EE=EE=EESPIPut(加器>>;>;16);EESPIPIPut;EESPIPut;EESPIPut十六;EESPIPut;EESP(addr>>8);EESPIPut(addr);Page.=0;而计数>;0){EESPIPut(*源++);计数--;计数--;Page计数器++;如果((((addr+Page计数器)和amp;((NVM_PAGE_PAGE_SIZE-1)&;(NVM_PAGE_PAGE_PAGE_PAGE_SIZE_SIZE-1))={0){EE EE_nCS=1;计数>>>;0){gt>>>0){{gt gt>>{{gt{gt{gt{gt{{0{gt{{gt{{*************************//
|
|
|
|
|
|
作为一个新主题,这样会更好,因为您与原始海报的问题不同。您是否在使用“SST25VF010A”和“PIC24FJ128GA002”?“不能写”实际上是什么意思?你试着写什么,你做了什么,看看它是否奏效,当你检查它是否有效时,你观察到了什么?你在试图给他们写信之前擦掉了位置吗?如果你想让人们看你的代码,你应该在代码中放一些注释来解释你在做什么。
|
|
|
|
|
|
1)我试着使用“SST25VF010A”和“PIC24FJ128GA006”2)//********************************************************************/“uint8_t Transmit_data=25;//发送值25 uint32_t地址;“uint8_t Receive_data;//变量,我试着存储接收值。NVMWrite(&Transmit_data,&address,1);NVMRead(&Receive_data,&address,1);//***********************************************************************/我预期在上面的代码中可以看到Transmit data值在variableReceive_data中。但是我得到的值是0xFF。我甚至在范围内看SPI信号,一切看起来都很好。3)没有,我没有擦除位置。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5794 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1125浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 16:47 , Processed in 1.297919 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1666