基于小梅哥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中读多少字节,同时写多少字节这种,需要设置。
2876

被折叠的 条评论
为什么被折叠?



