Xilinx开发板利用SPI与铁电存储器FM25H20通信问题 50C

刚刚开始学习。想利用SPI与铁电存储器FM25H20进行通信,不使用中断。铁电存储器的写保护线没有连接。我的步骤是:初始化SPI,清空RXFIFO,配置初始参数为0x0002f019,建立一个数组含有128个数,前五个分别是铁电存储器的写使能,写命令和地址指令,由于ZYNQ-7000系列的板子SPI是先输出地位,FM25H20是先处理高位,所以我把数组中的数进行了倒序,用for循环把数组中的数写到TXFIFO后,将Man_Start_com置1,通过寄存器Intr_Status_reg0中看TXFIFO是否空,RXFIFO是否满来看是不是发送完成。我理解是TXFIFO每发送一位相应的RXFIFO就接收一位。Man_Start_com位清0,读RXFIFO128次将其清空,再建立一个128数组,前四个数是铁电的读指令和地址,写进TXFIFO后Man_Start_com置1,写地址和读地址是一样的,理论上来讲我把RXFIFO中的数挪到一个数组中后应该有123位是我第一个数组中的,但实际上所有的数全是255,求一位大神解答为什么,以及我应该怎么处理

0

1个回答

你拿个逻辑分析仪抓一下波形,如果都是255 两种可能,1:数据确实是255 2:没有读回来,也可能是255

0
qq_32832003
qq_32832003 亲,貌似你没有回答我的问题,我也知道自己没有读回来,因为就不是我写的数据,现在读不成功那么我想知道我是否成功的写了进去,以及发生这个问题原因是什么,谢谢你的回答
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
FM25V01铁电存储器驱动移植
最近在做毕设,为了兼容PIX的固件,硬件选用了PIX的FMUV5传感器组合: ICM20689 IST8310 MS5611 主控是STM32F407 其他的驱动都好移植 ICM20689 SPI读取 使用42M速度时会出错 改成4分频到21M后正常每1MS读取一次没问题 但是移植到FM25V01时出现了卡顿 和普通的W25QXX不一样,这个芯片在写数据前不需要擦除,尽管写,高达10^...
【铁电】铁电读写程序单个读写错误BUG  的解决
  在操作铁电存储器的过程中,发现一个BUG,那就是连续写入的时候,结果正确,单个写入的时候结果不正确,而且都是第一个正确,紧跟着的就不正确。后来怀疑是每个写的程序后面延时不够,但是不管延时长,均是一样的结果。开始怀疑铁电操作方面的原因,又重新看了几遍PDF,依然没有发现问题所在。经过周老师的指点,把分析的焦点重新放在读的程序上,试一试分开读,结果发现,分开单个读同样出现一...
SPI接口FM25CL64铁电存储器测试读写代码
SPI接口FM25CL64铁电存储器测试读写代码,在PICC18上编译通过.如果有任何疑问,可以联系我来解答.QQ52478116
FPGA与铁电存储器SPI通信Verilog实现
SPI工作于模式3,与铁电存储器FM25V01通信实现存储器的读写,已在实验板上实现
铁电FRAM 驱动增加
FRAM (Ferroelectric Random Access Memory)  通俗的说就是一种特定的eeprom,但这种存储器很有特点,读写快,次数多,温度适应广,还不丢失。很适合保存临时数据。总之能用到的就是好东西,linux下要增加驱动。可能是太简单,反而没有 详细说明驱动怎么搞的,连个测试代码也不好找。 MB85RC 是比较常见的fram ,我们用的就这样。
铁电的读写程序
富士通的M3控制板,使用硬件IIC读取铁电
c8051f120与SPI接口 MCP42100数字电位器及FM25L04铁电读写程序
C8051F120用SPI口读写铁电,铁电芯片为FM24CL04,可兼容FM25CL64,绝对好使。
zynq7000板子利用spi与铁电存储器fm25h20通讯问题
刚刚开始学习,现在用的芯片是xc7z030,想通过spi和铁电存储器通讯,参数设置为0x0002f019,建立了一个数组,共128个数,前五个是铁电存储器的写使能,写命令和地址,enable Spi后利用for循环写到Txfifo里后把Man_start_com置1,之后再建立一个数组前四个数是铁电存储器的读命令和地址,清空rxfifo后把这个数组写到txfifo中使能发送,结束后再把rxfifo中的数依次放到一个数组中但是所有的数都是255,不是我第一个数组中的。芯片的spi先传低位,铁电的先处理高位,这个我已经考虑了。请大神帮忙看下我的问题出在哪?
STM32 FM25CL64B 铁电存储器
STM32和FM25CL64B 铁电存储器 SPI接口
FM24CL64中文资料_无延迟写周期_铁电存储器
FM24CL64中文资料_无延迟写周期_铁电存储器
Linux系统 通过i2c读写铁电存储器 ram
imx6ul上要加入铁电存储器,型号fm24cl64b,存储器焊接在i2c 1上,使用open打开/dev/i2c-0,配置地址时舍弃最后一位读写位,系统会自动提供,write(fd,buf,len)写入,其中buf的前两位是内存偏移地址,关于内存地址详见https://wenku.baidu.com/view/262b4d43be1e650e52ea9929.html,len是数组长度,read...
铁电存储器FM25xx驱动程序(15单片机)
本资源主要是以stc15w60s2为开发平台,进行铁电读取与擦写实验,适用于数据的快速存储与高擦写次数的研究。
FRAM铁电存储器与MRAM磁性存储器的对比分析
FRAM铁电存储器的工作原理: FeRAM使用了一层有铁电性的材料,取代原有的介电质,使得它也拥有非挥发性内存的功能。它以铁电物质为原材料,将微小的铁电晶体集成进电容内,通过施加电场 ,铁电晶体的电极在两个稳定的状态之间转换,实现数据的写入与读取。每个方向都是稳定的,即使在电场撤除后仍然保持不变,因此能将数据保存在存储扇区而无 需定期更新。FeRAM的写入次数可以高达1014次和10年的数据保存...
DSP28335 FM25CL64
TI公司的DSP28335采用SPI方式读取FM25CL64,根据其数据表,利用地址自增原理,简化了读写时间。
FM25V02 驱动程序
(1) 本程序为铁电存储器FM25V02(32K x 8 bits)驱动. (2) 使用的是NXP的LPC2387的ARM7平台. (3) 本驱动程序也可适用于FM25V05, FM25V10, FM25H20等SPI型铁电存储器,只需要修改地址范围部分即可. (4) 由于本驱动使用的是LPC2387的硬件SPI接口,因此要移植到其它的硬件平台,需要修改其SPI部分的程序.
FM25L16铁电存储器与F020读写
FM25L16铁电存储器与F020读写 unsigned char SpiReadWrite(unsigned char c) { SPIF = 0; SPI0DAT = c; while (SPIF == 0); return SPI0DAT; } /* unsigned char FMRead(unsigned int addr) { unsigned char b; fm0(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_READ); SpiReadWrite(addr >> 8); SpiReadWrite(addr & 0xff); b = SpiReadWrite(0); _nop_(); _nop_(); fm1(); _nop_(); _nop_(); return b; } void FMWrite(unsigned int addr, unsigned char b) { fm0(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_WREN); _nop_(); _nop_(); _nop_(); fm1(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); fm0(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_WRITE); SpiReadWrite(addr >> 8); SpiReadWrite(addr & 0xff); SpiReadWrite(b); _nop_(); _nop_(); fm1(); _nop_(); _nop_(); } */ void FMReadPage(unsigned int addr, unsigned char * index, unsigned char n) { unsigned char i; fm0(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_READ); SpiReadWrite(addr >> 8); SpiReadWrite(addr & 0xff); for(i=0;i<n;i++) { *(index+i) = SpiReadWrite(0); } _nop_(); _nop_(); _nop_(); fm1(); _nop_(); _nop_(); _nop_(); } void FMWritePage(unsigned int addr, unsigned char * index, unsigned char n) { unsigned char i; fm0(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_WREN); _nop_(); _nop_(); _nop_(); fm1(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); fm0(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SpiReadWrite(EE_WRITE); SpiReadWrite(addr >> 8); SpiReadWrite(addr & 0xff); for(i=0;i<n;i++) { SpiReadWrite(*(index+i)); } _nop_(); _nop_(); fm1(); _nop_(); _nop_(); _nop_(); }
基于Xilinx N4板和MicroBlaze核的串行接口实验:SPI UART
串行接口:SPI UARTXPS-&amp;gt;SDK(Platform)-&amp;gt;新建BSP-&amp;gt;新建appproject问题1:在创建工程的时候没有像书上那样,添加了RS232接口,那么在prots中添加UART端口可以吗?经过试验,在创建工程的时候和在创建完成之后添加RS232都可以用来烧写程序的错误1:在导出到SDK的时候,导出失败不能解决的办法:新建一个BSB工程,在file-&amp;gt;sw...
AN508-MAXQ2000与FM25L04铁电存储器SPI接口原理与实现1.0
AN508-MAXQ2000与FM25L04铁电存储器SPI接口原理与实现
铁电选型指南,很不错的存贮器,能够掉电保存,并且是的SPI或是I2C通信的
铁电选型指南,很不错的存贮器,能够掉电保存,并且是的SPI或是I2C通信的
mb85铁电存储器C例程
mb85系列铁电存储器C程序,读写。可以应用任何嵌入式系统应用
写的单片机程序 C8051f410 spi通讯
用c8051f410写spi写的铁电存储协议和串口驱动,写数据到铁电存储器中 并且发送到串口
一种4+kb铁电存储器的设计
铁电存储器的设计与应用,关于如何更好地设计铁电存储器及解决一些设计中遇到的问题。
铁电存储器MB85RS128A资料
富士通铁电存储器MB85RS128A资料 128K 16 K ×8 Bit SPI
如何在两个Arduino开发板之间使用SPI总线进行通信
微控制器使用许多不同的协议与各种传感器和外围设备进行通信。有许多用于无线和有线通信的协议,并且最常用的通信技术是串行通信。串行通信是通过通信信道或总线一次一位地发送数据的过程。有许多类型的串行通信,如UART、CAN、USB、I2C和SPI通信。 在本篇文章中,我们将了解SPI协议以及如何在Arduino中使用它。我们将使用SPI协议在两个Arduino开发板之间进行通信。在这里,一个Arduin...
24系列EEPROM/FRAM通用接口
1.写在前面   “24系列”的EEPROM,一般地我们认为是以i2c为通信接口的一系列串行EEPROM,各大半导体厂商出产的该系列EEPROM都遵循这个规则,而且电路和控制程序上也兼容。如AT24C02、ST24C02等。   FRAM(铁电存储器)是近几年来比较热门的一项存储技术,并且有相关实际产品的应用。FRAM具有ROM和RAM的特点,擦写寿命长、读写速度快、低功耗(读写所需电压低...
铁电存储器
富士通储存芯片 MB85RC256技术资料,比较全面,包括储存方式、封装等介绍。
铁电存储器数据手册
这是最新型号FM25V10铁电存储器替代原型号FM25L1024
FM24C256_cn中文资料
FM24C256是用先进的铁电技术制造的256K位的非易失性存储器。
铁电存储器(FRAM)的工作原理(中文)
铁电存储(FRAM)的工作原理描述,包括图片。 中文版。
Xilinx ml605板子的所有IP综合例子
Xilinx ml605板子的所有IP综合例子,在ISE13版本以上可以打开
带RTC的I2C总线铁电存储器FM31256的设计.doc
FM31256是一种基于I2C总线、采用铁电体技术的多功能存储芯片。除了非易失存储器外,该器件还具有实时时钟、低电压复位、看门狗计数器、非易失性事件计数器、可锁定的串行数字标识等多种功能。文章主要介绍了FM31256的基本功能、原理,并结合实例给出了其在电磁铸轧电源控制装置中的具体应用方法。
基于MICROBLAZE的SPI设计流程
基于MICROBLAZE的SPI设计流程
wince spi驱动读写铁电存储器
驱动代码:[code=C/C++][/code]rn#include rn#include rn#include "pmplatform.h"rn#include "Pkfuncs.h"rn#include rn#include rn#include rn#include rnrnvolatile S3C2440A_SPI_REG *v_pSPIregs;rnvolatile IOPreg *s2440IOP = (IOPreg *)IOP_BASE;rnrnBOOL InitializeAddresses(VOID);rnBOOL SPIGpioInit();rnrnint m=0;rnstatic int n=0;rnBOOL WINAPI DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved)rnrnrn switch(dwReason)rn rn case DLL_PROCESS_ATTACH:rn RETAILMSG(1,(TEXT("SPI:DLL_PROCESS_ATTACH.\r\n"))); //提示动态库加载rn DisableThreadLibraryCalls((HMODULE)hInstDll);rn break;rnrn case DLL_PROCESS_DETACH:rn RETAILMSG(1,(TEXT("SPI:DLL_PROCESS_DETACH.\r\n"))); //提示动态库卸载rn break;rnrn rnrn return(TRUE);rnrnrnrnrnrnDWORD SPI_Init(DWORD dwContext)rnrnrnrn RETAILMSG(1,(TEXT("SPI Initialize ...")));rn if (!InitializeAddresses())rn return (FALSE);rn if (!SPIGpioInit())rn rn return FALSE;rn rn RETAILMSG(1,(TEXT(" SPI_Init OK !!!\n")));rn return TRUE;rnrnrnBOOL SPI_Deinit(DWORD hDeviceContext)rnrn BOOL bRet = TRUE;rnrn RETAILMSG(1,(TEXT("USERKEY: INT_Deinit\r\n")));rn VirtualFree((void*)v_pSPIregs, sizeof(S3C2440A_SPI_REG), MEM_RELEASE);rn VirtualFree((void*)s2440IOP,sizeof(IOPreg),MEM_RELEASE);rn return TRUE;rn rnrnrnBOOL InitializeAddresses(VOID)rnrn BOOL RetValue = TRUE;rnrn /* AD Register Allocation --------------------------------------------*/rn v_pSPIregs = (volatile S3C2440A_SPI_REG *)VirtualAlloc(0, sizeof(S3C2440A_SPI_REG), MEM_RESERVE, PAGE_NOACCESS);rn //s2440IOP = (volatile IOPreg *) VirtualAlloc(0,sizeof(IOPreg),MEM_RESERVE, PAGE_NOACCESS);rn if (v_pSPIregs==NULL)rn rn RETAILMSG(1,(TEXT("For ADCreg: VirtualAlloc failed!\r\n")));rn return FALSE;rn rn else rn rn if (!VirtualCopy((PVOID)v_pSPIregs, (PVOID)(S3C2440A_BASE_REG_PA_SPI>>8), sizeof(S3C2440A_SPI_REG),PAGE_PHYSICAL|PAGE_READWRITE | PAGE_NOCACHE))rn rn RETAILMSG(1,(TEXT("For SPIPregs: VirtualCopy faiSPI!\r\n")));rn RetValue = FALSE;rn rn rnrnrn s2440IOP = (volatile IOPreg *) VirtualAlloc(0,sizeof(IOPreg),MEM_RESERVE, PAGE_NOACCESS);rn if(s2440IOP == NULL) rn rn RETAILMSG(1,(TEXT("For s2440IOP: VirtualAlloc failSPI!\r\n")));rn rn else rn rn if(!VirtualCopy((PVOID)s2440IOP,(PVOID)(IOP_BASE),sizeof(IOPreg),PAGE_READWRITE | PAGE_NOCACHE )) rn rn RETAILMSG(1,(TEXT("For s2440IOP: VirtualCopy fai SPI!\r\n")));rn rn rn return(RetValue);rnrnrnrnBOOL SPIGpioInit()rnrn rn //int i;rn RETAILMSG(1,(TEXT("SPI_Gpio_Setting----\r\n")));rn s2440IOP->rGPGCON = (s2440IOP->rGPGCON &~(3 << 14)) | (3<< 14); // GPG7 == SPICLK1.rn s2440IOP->rGPGCON = (s2440IOP->rGPGCON &~(3 << 12)) | (3<< 12); // GPG6 == SPIMISI1.rn s2440IOP->rGPGCON = (s2440IOP->rGPGCON &~(3 << 10)) | (3<< 10); // GPG5 == SPIMISO1.rnrnrn s2440IOP->rGPGCON = (s2440IOP->rGPGCON &~(3 << 6)) | (1<< 6); // GPG3 为输出引脚.rn RETAILMSG(1,(TEXT("rGPGCON1: %02X \r\n"),s2440IOP->rGPGCON));rn //中断寄存器设置rn v_pSPIregs->SPCON1=(v_pSPIregs->SPCON1 &~(3<<5)) | (0<<5); //spi模式选择rn v_pSPIregs->SPCON1=(v_pSPIregs->SPCON1 &~(3<<3)) | (3<<3);rn v_pSPIregs->SPCON1=(v_pSPIregs->SPCON1 &~(1<<0)) | (0<<0);rn v_pSPIregs->SPCON1=(v_pSPIregs->SPCON1 &~(3<<1)) | (2<<1) ; //极性相位选择rn //v_pSPIregs->SPPRE1=(v_pSPIregs->SPPRE1 &~(5<<2)) | (6<<2); //预分频设置rn RETAILMSG(1,(TEXT("SPCON1: %02X \r\n"),v_pSPIregs->SPCON1));rnrn v_pSPIregs->SPPIN1= v_pSPIregs->SPPIN1|(0<<2)|(0<<0);rn RETAILMSG(1,(TEXT("SPPIN1: %02X \r\n"),v_pSPIregs->SPPIN1));rnrn v_pSPIregs->SPPRE1=0x18;rn /*for (i=0;i<10;i++)rn rn v_pSPIregs->SPRDAT1=v_pSPIregs->SPRDAT1|0xFF; //写数据0xFF到SPRDAT1初始化MMC或SD卡rn */rn s2440IOP->rGPGDAT=(s2440IOP->rGPGDAT&~(1<<3))|(1<<3); //设置nSS作用的GPIO引脚为低激活MMC或SD卡rnrn RETAILMSG(1,(TEXT("GPGDAT: %02X \r\n"),s2440IOP->rGPGDAT));rnrn //s2440IOP->rGPGUP&=0xFF1F;rn //s2440IOP->rGPGUP=s2440IOP->rGPGUP|(7<<6);rnrn RETAILMSG(1,(TEXT("GPGDUP: %02X \r\n"),s2440IOP->rGPGUP));rnrn return TRUE;rnrnrnrnDWORD SPI_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)rnrn rn int temp[3];rn int i;rn s2440IOP->rGPGDAT=(s2440IOP->rGPGDAT&~(1<<3))|(0<<3); //设置nSS作用的GPIO引脚为低激活MMC或SD卡rn for (i=0;i<1000000;i++);rnrn if (m==0)rn rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x03;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn rn rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rnrn //for (i=0;i<100000;i++);rn while(!v_pSPIregs->SPSTA1&0x01);rn temp[0]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("rtemp: %d NO:%d\r\n"),(int)temp[0],m));rn rn /*while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn temp[1]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("rtemp: %d NO:%d\r\n"),(int)temp[1],m));rn rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn temp[2]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("rtemp: %d NO:%d\r\n"),(int)temp[2],m));rnrn memcpy(pBuffer,&temp,3);rnrn //RETAILMSG(1,(TEXT("temp: %d NO:%d\r\n"),(int)temp),m);*/rn rn m++;rn RETAILMSG(1,(TEXT("rSPI_Control: SPI_Read\r\n")));rn //m++;rn rn elsern rn /*while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rn while(!v_pSPIregs->SPSTA1&0x01);rn temp=v_pSPIregs->SPRDAT1;rn memcpy(pBuffer,temp,3);rn //RETAILMSG(1,(TEXT("temp: %d NO:%d\r\n"),(int)temp),m);rn RETAILMSG(1,(TEXT("xtemp: %d NO:%d\r\n"),(int)temp,m));rn m++;rn RETAILMSG(1,(TEXT("xSPI_Control: SPI_Read\r\n")));*/rnrnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x03;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn rn //for (i=0;i<100000;i++);rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rn //for (i=0;i<100000;i++);rn while(!v_pSPIregs->SPSTA1&0x01);rn temp[0]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("xtemp: %d NO:%d\r\n"),(int)temp[0],m));rnrn /*while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn temp[1]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("xtemp: %d NO:%d\r\n"),(int)temp[1],m));rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0xFF;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn temp[2]=v_pSPIregs->SPRDAT1;rn RETAILMSG(1,(TEXT("xtemp: %d NO:%d\r\n"),(int)temp[2],m));rnrn memcpy(pBuffer,&temp,3);rnrn //RETAILMSG(1,(TEXT("temp: %d NO:%d\r\n"),(int)temp),m);*/rnrn m++;rn RETAILMSG(1,(TEXT("xSPI_Control: SPI_Read\r\n")));rn rnrn rn s2440IOP->rGPGDAT=(s2440IOP->rGPGDAT&~(1<<3))|(1<<3); //设置nSS作用的GPIO引脚为低激活MMC或SD卡rn return TRUE;rnrnrnBOOL SPI_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut)rnrn return TRUE;rn rnrnrnDWORD SPI_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)rnrn DWORD i;rn int *pbuffer;rn rn s2440IOP->rGPGDAT=(s2440IOP->rGPGDAT&~(1<<3))|(0<<3); //设置nSS作用的GPIO引脚为低激活MMC或SD卡rn for (i=0;i<1000000;i++);rn pbuffer=MapPtrToProcess(pSourceBytes,GetCallerProcess());rn for (i=0;iSPSTA1&0x01);rn v_pSPIregs->SPTTA1=0x06;;*/rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x06;rnrn //for (i=0;i<100000;i++);rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x02;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn rn //for (i=0;i<100000;i++);rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rn rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrn RETAILMSG(1,(TEXT("pbuffer: %d\r\n"),(int)*pbuffer));rn while(!v_pSPIregs->SPSTA1&0x01);rn RETAILMSG(1,(TEXT("tTData: %d NO:%d\r\n"),(int)v_pSPIregs->SPTDAT1,n));rn rn n++;rn rn elsern rn //int bai,shi,ge;rn //bai=n/256rn /*while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x02;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x0;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPRDAT1=0x0;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPRDAT1=n;*/rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x06;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x02;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=0x01;rn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rnrn while(!v_pSPIregs->SPSTA1&0x01);rn v_pSPIregs->SPTDAT1=*pbuffer;rn RETAILMSG(1,(TEXT("xTData: %d NO:%d\r\n"),(int)v_pSPIregs->SPTDAT1,n));rn RETAILMSG(1,(TEXT("pbuffer: %d\r\n"),(int)*pbuffer));rn n++;rn rn rn //RETAILMSG(1,(TEXT("RData: %d\r\n"),(int)v_pSPIregs->SPRDAT1));rn rn RETAILMSG(1,(TEXT("SPI_Control: SPI_Write\r\n")));rn s2440IOP->rGPGDAT=(s2440IOP->rGPGDAT&~(1<<3))|(1<<3); //设置nSS作用的GPIO引脚为低激活MMC或SD卡rn return 0;rnrnrnrnrn问题是:铁电存储器引脚有片选有时钟,片选上了,并且数据到了引脚上去,但现在目前数据读不出来,也不能确定是否写进去数据???求大神指教
MB85RC128 铁电存储器 数据手册
MB85RC128 铁电存储器 数据手册
基于AM335X与FPGA的SPI通讯设计
在2013年的工作中,涉及到了AM3359与XC7K325T之间的相互通信,其目的是为了获取FPGA设计版本号,该FPGA版本号保存在FPGA的寄存器0xFFFF中,FPGA的版本值随着加载程序发生变化,当时的版本信息为0x1003. 需要说明的是,在本文中的代码风格是刚工作两年的时候的代码风格,现在回看,这些代码风格实在难以阅读。尤其是SPI的verilog程序等。并不代表现在的编程水平与代码
STM32用到的几种存储器
24c02是EEPROM W25Q64是FLASH IS62WV51216是SRAM FLASH:单片机运行的程序存储的地方。SRAM:存储单片机运行过程中产生的了临时数据。 EEPROM:视用户的需要而定,一般用来存储系统的一些参数,这些参数可能需要修改,也可能不会修改。
SPI读写EEPROM
SPI EEPROM 铁电 通过模拟SPI的时钟,读写EEPROM
FPGA SPI加载时间计算
FPGA加载时间计算(SPI) 1、下图描述了1X或2X数据宽度的连接方式,2X模式下,master-out-slave-in (MOSI) 引脚为双向IO,同时作为数据引脚。 2、下图描述了4X数据宽度的连接方式。 3、FPGA采用SPI加载的注意事项 上电加载过程中,FPGA和SPI Flash都要进行自检,自检完成后FPGA将读命令发送到SPI Flash以检索配置数据,此时SPI Fl...
铁电存储器FM25CL64的C51编程
铁电存储器FM25CL64 的C51 编程
铁电存储器fm1808
关于铁电存储器FM1808的详细资料及其应用