草庐IT

手撕AXI-Full总线接口,实现AXI_Full Master接口

一、AXI介绍AXI全称AdvancedeXtensibleInterface,属于AMBA总线中的一种,由ARM公司制定。目前主流的包括AXI3和AXI4,其中AXI4又包括AXI4_Lite、AXI4_Full以及AXI4_Stream。本文是基于XilinxAXI4IP实现AXI4_FULLMaster控制接口。AXI协议是基于突发传输的,意味着只需要告诉首地址以及突发大小等信息即可实现数据传输。AXI_Full包括五个独立的通道:1)读地址通道;2)读数据通道;3)写地址通道;4)写数据通道;5)写响应通道。具体的通道信号可以参考ARM官网文档,此处不列举,重点在Verilog实现,有

STM32 硬件IIC移植U8g2库

STM32硬件I2C移植U8G2需要准备的东西STM32硬件I2C移植U8G2u8g2配置U8g2源码下载U8g2源码配置STM32CubeMX代码生成生成32工程导入KEIL适配驱动初始化优化Background:U8g2是Arduino上一个广泛使用的屏幕显示库,有着丰富的库函数实现功能,之前做的OLED桌面天气小摆件就是基于U8g2库的,最近在使用STM32想着移植U8g2发现大多数是基于软件I2C的,于是准备使用硬件I2C驱动OLED显示屏0.96寸OLEDSSD1306参考链接:u8g2stm32移植记录视频链接:BilibiliSTM32HAL库硬件IIC移植u8g2库u8g2配置

项目一:IIC读写EEPROM AT24C02

回头想了想在工作中调过的EEPROM还挺多的,有M24M02、M28010 、AT24C02等,今天讲一下AT24C02吧一、AT24C02简介1.1特点文档已经上传了,需要的同学可以自行下载哈,晚点我会把下载链接附上来。我大概照着文档翻译了一下: 存储器内部按组织256字节×8位(2K)组织双线串行接口(IIC)兼容400kHz通信速率具有硬件数据保护的写保护引脚8字节/页写模式允许部分页写入高可靠性:100万次写周期,数据保留:100年1.2引脚定义串行时钟(SCL)、串行数据(SDA)不再赘述。A2,A1和A0引脚用于AT24C02的设备地址输入。WP为写保护引脚,提供硬件数据保护。写保

AMBA协议AXI-Lite(AXI-Lite从机代码设计)

文章目录一、设计思路1、什么时候发生写数据操作?2.什么时候发生数据读操作?3.如何根据AXI_WSTRB信号完成数据的写入?二、源码设计2.1写通道源码设计2.2读通道源码设计2.3模板代码三、仿真总结一、设计思路在设计开始之前,我们需要弄清楚以下几个问题:什么时候发生写数据操作?什么时候发生数据写操作?如何根据AXI_WSTRB信号完成数据的写入?1、什么时候发生写数据操作?  我们在第4-1节对AXI-Lite协议介绍后,分析了写数据发生的条件,那就是当写数据和写地址同时有效时,立即完成传输;  我们将上面的条件翻译一下,就是当AXI_AWVALID、AXI_AWREADY、AXI_WV

stm32的IIC驱动0.96OLED

IIC原理介绍:IIC是一个总线的结构但不支持总线协议OLED介绍:一、0.96寸OLED屏幕介绍本文采用的是4针的0.96寸OLED显示进行讲解,采用的是SPI协议,速度会比采用I2C协议的更快,但这两者的显示驱动都一样,本质上没有太大差别。屏幕整体分辨率为128*64,有黄蓝、白、蓝三种颜色可选,驱动芯片为SSD1306二、SSD1306驱动芯片1)图像显示RAM(GDDRAM)GDDRAM是位映射静态RAM,大小为128x64位。GDDRAM分为8页(PAGE0~PAGE7),每页内1个SEG对应1Byte数据,一页由128Byte组成。即屏幕每8行像素点(8PIXEL)记为一页(PAG

STM32硬件IIC卡死问题和DMA发送数据异常问题

STM32硬件IIC卡死问题和DMA发送数据异常问题问题1描述:一直听说STM32的硬件IIC有问题,我平时做项目一直没有遇到过,这次做项目发现硬件IIC居然会自己卡死,现象就是IIC发不出数据,用逻辑分析仪捕捉不到任何电平,必须要重启单片机才能正常,接下来说一下我的硬件环境:STM32作为主机,IIC总线上挂载这AT24C02和一个流量传感器,但是这个流量传感器有问题,他在不上电的时候IIC总线一直输出1.8V(IIC信号线反向给流量传感器供电导致的),这就导致STM32初始话完IIC后就处于卡死状态(STM32检测到IIC线异常后就直接卡死了,不管你程序怎么发送信号电平),所以最终解决办法

【FPGA】AXI4-Lite总线读写BRAM

博主参考和学习的博客AXI协议基础知识。这篇博客比较详细地介绍了AXI总线,并且罗列了所有的通道和端口,写代码的时候可以方便地进行查表。AXI总线,AXI_BRAM读写仿真测试。这篇文章为代码的书写提供大致的思路,比如状态机和时序的控制问题,可以参考。valid-ready双向握手机制双向握手机制的实质是:数据接收方R告诉数据发送方T“我准备好接收数据了”,并拉高ready;同样的,数据发送方T告诉数据接收方R“我准备好发送数据了”,并拉高valid。数据发送方给出valid,数据接收方给出ready重点:只有在valid和ready同时拉高时,表面成功握手,数据才得以传输。【例】比如下图,当

【ARM AMBA AXI 入门 2 - AXI协议中的 BURST Transfer】

请阅读【ARMAMBAAXI总线文章专栏导读】文章目录1.1突发传输简介1.1.1AXI4突发传输控制信号1.1.1.1AxLEN突发传输长度1.1.1.2AxSIZE突发传输宽度1.1.1.3AxBURST突发传输类型1.1.2AXI传输实例1.1.3AIX传输相关术语transaction/burst/transfer1.1突发传输简介突发传输(BurstTransfer)是指在地址总线上进行一次地址传输后,进行多次数据传输(datatransfer),相比于每次只读写一个数据

【ARM AMBA AXI 入门 15 -- AXI-Lite 详细介绍】

请阅读【ARMAMBAAXI总线文章专栏导读】文章目录AXILiteAXI-Full介绍AXIStream介绍AXILite介绍AXIFull与AIXLite差异总结AXILiteAMBAAXI4规范中包含三种不同的协议接口,分别是:AXI4-FullAXI4-LiteAXI4-Stream上图中的AXIFULL和AIX-Lite我们都把它们叫做Memorymap,memorymap的协议是可以寻址的,它是有地址的,它每次的访问都是针对内存中的一个

0.96OLED 4针IIC STM32-标准库版本(附源码)

0.96OLED4针IICSTM32标准库版本在前面已经介绍过,这里就不多说了,详情请见:0.96OLED4针IICSTM32HAL库版本另外,本人在代码中封装了一个OLED显示的接口,方便开发者对字符显示位置的快速定位,以及像C语言printf()函数一样在屏幕上进行int,float,char等变量的格式化输出。非常方便实用。封装接口原先用这个oled库提供的接口使用x,y定位坐标计算比较麻烦,因此做了一个宏进行封装。可变参数宏:chartxt[16]; //需要在调用这个显示接口前声明txt这个变量#definedisplay(row,col,size,...){sprintf((cha