基于小梅哥Zynq 7020 IIC/AXI_IIC/SPI/AXI_SPI裸机调试记录

基于小梅哥ACZ702开发板以及小梅哥例程

使用PS硬核的IIC读写EEPROM以及使用AXI_IIC IP核来读写EEPROM

经过多次测试,包括参考官方IIC EEPROM程序、网上各位大佬的总结以及不同开发板的例程,发现坑主要在下面几点:
1、由于直接调用的是官方给的Bsp库里面的函数发送的时候前面需要加上要发的地址,读的时候需要发送地址,然后再进行读取。
2、参考官方例程eeprom_polled例程和小梅哥例程,在写的时候,发送的前两个字节得用来存地址,然后一起发出去,这个地址指的是写进EEPROM的地址,从0开始,一次写一页,官方给出的代码如下:

	xil_printf("PageSize = %d \n", PageSize);
	if (PageSize == PAGE_SIZE_16) {
		WriteBuffer[0] = (u8) (Address);
		WrBfrOffset = 1;
	} else {
		WriteBuffer[0] = (u8) (Address >> 8);
		WriteBuffer[1] = (u8) (Address);
		WrBfrOffset = 2;
	}

Status = EepromWriteData(&IicInstance, WrBfrOffset + PageSize);

在EEpromWriteData中调用这个函数:

Status = XIicPs_MasterSendPolled(IicInstance, WriteBuffer,
					  ByteCount, EepromSlvAddr);

同理,小梅哥中写的时候,调用里面API,其中的RegBIT要用REG16。
3、频率我试了24LC64最大频率400kHz也可以
4、读和写之间需要加上延时

对于使用AXI_IIC IP核,调用官方bsp库里面的API不一样,其他需要注意的点和PS IIC差不多。

SPI以及AXI_SPI

小梅哥给的例程是使用SPI连接两个移位寄存器,实现串并输出。通过MOSI输出2个1字节的数据,一个用来控制数码管的显示,一个用来片选,就是选中哪个数码管进行显示,MOSI输出的是串行的数据,通过移位寄存器输出并行数据,通过余辉效应进行数码管的显示。而输出的频率,即每个数码管显示的时间间隔通过私有定时器控制。
其他需要注意的地方就是SPI模式的设置,以及使用AXI_SPI和硬核的SPI读写操作,比如硬核SPI中读多少字节,同时写多少字节这种,需要设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值