【STM32+FPGA+FSMC】31,FSMC熟练掌握;KEIL5生成bin文件;SDRAM的使用;IAP检验码 2019年04月10日

本文详细介绍了STM32与FPGA之间的数据交互技术,包括使用FSMC进行地址与数据线复用,以及如何通过特定命令写入数据到FPGA。探讨了KEIL5生成bin文件的方法,IAP检验码的含义,并对比了NORFLASH与PSRAM在数据采集系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,quartus的编译文件不能带中文,altera自带PLL,RAM的IP核

1-1,PLL参数:inputClk=25M,outC0=100M

1-2,RAM:1-PORT参数:input data[15:0],address[7:0],output_q[15:0]

1-3,STM32显示的原理图是DB0-15,AB16-23.所以FSMC既可以选择复用模式,也可以选择线独立模式

STM32 的IO口对应关系

1-4,FMC 灵活的的存储控制器,用于驱动SRAM,NOR FLASH,NAND FLASH,SDRAM。

STM32的配置选择MUXED NOR FLASH, FMC_NORSRAM_BANK1;此时FPGA==NOR FLASH

1-5,店家例程竟然给了配置模式
    

1-6,关于地址的使用,为了增加寻址空间,可以对数据线进行复用。

在icore4中,可以实现最大寻址空间为8+16=24,

即2^24的寻址空间

转自 https://blog.csdn.net/chaoshui7758/article/details/50236511

STM32的FSMC支持数据与地址线复用或非复用两种模式

非复用模式:16位数据线及26位地址线分开始用。推荐在144脚及以上的STM32产品上使用该模式。

复用模式:低16位数据/地址线复用。在该模式下,推荐使用地址锁存器以区分数据与地址。

若不使用锁存器:当NADV为低时,ADx(x=0…15)上出现地址信号Ax,当NADV变高时,ADx上出现数据信号Dx。
若使用锁存器:可同时在ADx上得到Ax和Dx。

FSMC中未使用的数据线或地址线可配置为GPIO

对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。因此,实际的访问地址为右移一位之后的地址。

//由于内部AHB总线的地址HADDR与FSMC总线地址存在一定的映射关系。在进行地址读写操作时,HADDR[0]并没有用到,相当于地址右移了1位
#define fpga_write(offset,data)	*((volatile unsigned short int *)(0x60000000 + (offset << 1))) = data   //uint32 data  
#define fpga_read(offset)	*((volatile unsigned short int *)(0x60000000 + (offset << 1)))

经过大量测试,当发送地址超过28位时,会导致单片机卡死

1-7:写命令到指定地址;指定地址不能超过25位;

单个地址的储存数据是低16位的,高16位丢弃,不会被写入到上一个或者下一个地址里面

case 0x11:  //写命令到指定地址;指定地址不能超过28位;单个地址的储存数据是低16位的,高16位丢弃,不会被写入到上一个或者下一个地址里面
{
uint32_t addr,cmd;
addr=(UART_Rx_Buff[1]<<24)|(UART_Rx_Buff[2]<<16)|(UART_Rx_Buff[3]<<8)|UART_Rx_Buff[4];
cmd=(UART_Rx_Buff[5]<<24)|(UART_Rx_Buff[6]<<16)|(UART_Rx_Buff[7]<<8)|UART_Rx_Buff[8];//此处的高16位无效

fpga_write(addr,cmd);
HAL_Delay(10);
cmd=fpga_read(addr);
printf("写入的数据=%d\r\n",cmd);
break;	
}

当addr&0xFE 00 00 00 !=0X0000 0000的时候卡死,即发生地址的高于或等于26位不能为1

0x 01 FF FFFF 单片机可以读取写入

0x 02 00 0000 单片机不能读取写入

2,

1-8,复用模式

 

2,KEIL5生成bin文件KEIL / MDK生成BIN文件的两种方式

使用相对地址,非常棒

D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L 

 

3,IAP检验码的说明

多组测试说明 当IROM1:0X1020 0000 时候,UART_Rx_Buff[7]==0x10;UART_Rx_Buff[6]==0x20;

所以检校栈顶地址 if(UART_Rx_Buff[7]==0x08)

4,NORFLASH目前看和PSRAM没有太大区别。

那么作为数据采集系统可以这样传输数据了,

FPGA作为NOR FLASH,进行数据采集,然后将数据以特定的顺序保存在NOR FLASH里面,比如占据0--N个数据地址。

STM32 通过实时读取NOR FLASH的数据来显示。

STM32发送控制命令给FPGA,可以写入命令到N+1,FPGA实时对地址为N+1的命令进行解析

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值