【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

news2025/1/20 5:09:01

目录

  • 1. DDR3 简介
    • 1.1 前要基本概念RAM & ROM
  • 2. DDR3测试及初始化
  • 3. RGBLCD简介及控制原理
    • 3.1 RGBLCD简介
    • 3.2 RGBLCD-时序-像素时钟-显存
      • 3.2.1 RGB LCD时序
      • 3.2.2 像素时钟(800*400分辨率)
      • 3.2.2 显存(800*400分辨率)
    • 3.3 RGBLCD的控制
      • 3.3.1 DOTCLK 硬件接口的时序控制
    • 3.4 RGBLCD的控制代码实现

个人学习记录

1. DDR3 简介

1.1 前要基本概念RAM & ROM

  首先进行简要的记录一些:

  • RAM:掉电(A)的一声,表示内容不在了,这个是内存,类比手机运行内存,对其使用是随用随取,不用申请;
  • RAM:掉电(o)的一声,表示无所谓,这个是存储,类比硬盘,芯片内部flash,对其读写要进行地址和空间的申请后才能使用,速度比RAM慢

  RAM发展路线:RAM->SRAM->SDRAM
  首先说明DDR3是RAM类型的,一般而言,芯片自身内部就带有RAM,但是都比较小,而对于运行大型的操作系统或者软件就需要较大的内存,因此衍生了外置RAM,其中DDR3就是这些外置RAM中性价比比较高的RAM;
  SDRAM(Synchronous Dynamic Random Access Memory) 适合用来做内存条,其中DDR1,2,3,4,5都属于SDRAM这一块,SRAM(Static Random-Access Memory) 适合做高速缓存或 MCU内部的 RAM,大量的 STM32 单片机开发板都使用到了 SRAM,比如 F103、F407 等;

2. DDR3测试及初始化

  由于对于IMX6ULL而言外置的DDR3是外置的RAM,那么我怎么才能确定这个DDR3是正常工作的呢?这个测试不是通过程序来测试的,是通过外部软件检测来进行检测的,检测需要的关键数据如下:可通过NXP的DR检测软件来进行检测,如果自己要焊接板子的话要详细了解板子的启动方式这一章节;

  DDR3这里的测试可以通过超频压力测试,一般超过其时钟频率的15%就代表这个芯片是工作正常的,注意再进行压力超频测试前要进行校准的设置;
  注意测试前要进行校准测试

3. RGBLCD简介及控制原理

3.1 RGBLCD简介

  首先就是要掌握的基本概念:

  • RGB:(RED、GREEN、BLUE)三原色,
  • 分辨率:例如1920*1080是什么含义,就是有这么多像素点
  • 像素格式:例如蓝色有很多种,如何对这些进行度量呢?因此可以分别采用一个字节位也就是8bit来表示Red,Green,Blue,而一个字节表示0-255,因此可以通过数字的大小来表示颜色的种类或深度,称为RGB888,同理如果再加上一个字节表示透明度,也就是ARGB888,这也是我们常用的像素格式;
  • 一些较为重要的寄存器表示的含义:一帧图像显示就是一行一行的显示完毕,出来就是一幅图片;

3.2 RGBLCD-时序-像素时钟-显存

3.2.1 RGB LCD时序

  这里的时序指的是再进行LCD通信时采用的约定,这里进行行时序和帧时序的分别介绍:如下图:行显示对应的时序图;

  其中关于DATA,DE,CLK,HSYNC写寄存器在RGBLCD的简介中已经介绍:下面对HSPW,HBP,HOZVAL,HFP进行一个简要的介绍:

  • HSPW:有些地方也叫thp,根据时序图可以看出是确定HSYNC的低电平的持续时间的,单位是CLK,这里注意,必须要持续一段时间才能有效;
  • HBP:有些地方称为thb,行同步信号后肩,一般也叫反步信号,单位是CLK;
  • HOZVAL:显示一行所用的时间,有些地方也称thd,单位是CLK;
  • HFP:有些地方也称为thf, 也称位行同步信号前肩,单位是CLK;
  • 因此对于一行信号所用的时间为:H=HSPW+HBP+HOZVAL+HFP;

  一帧图像就是由很多个行组成的,RGB LCD 的帧显示时序如图 所示:

  同理这里对一些重要的术语进行介绍一下:

  • VSYNC:帧同步信号,低电平有效,单位是CLK;
  • VSPW:也称为tvp,确定VSYNC的有效长度,单位是CLK;
  • VBP:也称为tvb,同步信号后肩,单位是CLK;
  • LINE:也称为tvd,显示一帧的有效时间,假如分辨率是800*400的话,那么LINE就是显示400行所用的时间;
  • VFB:也称为tvf,同步信号的前肩,单位是CLK;
  • 因此显示一帧所用的时间就是:有VSPW+VBP+LINE+VFB个行时间,也就是总的时间是:
  • Total=(VSPW+VBP+LINE+VFB)*(HSPW+HBP+HOZVAL+HFP);

3.2.2 像素时钟(800*400分辨率)

  屏幕的具体参数如下:像素时钟就是显示RGBLCD的时钟信号,这里拿显示一帧所用的时间来说明:上述已经得到了显示一帧所用的时间公示如下:

  • Total=(VSPW+VBP+LINE+VFB)*(HSPW+HBP+HOZVAL+HFP);

而我们屏幕的具体信息如下,因此可以算得显示60帧所用的时间:

Total=(VSPW+VBP+LINE+VFB)*(HSPW+HBP+HOZVAL+HFP)=(3+32+13+480)*(800+48+88+40)*60=30,919,680;

也就是将近:31MHZ,这和官方标定的基本一致;

3.2.2 显存(800*400分辨率)

  因为我们采用的是ARG888的像素格式,因此一个像素点的信息是4字节,因此要在内存中开辟出一段空间对这些像素内容进行存储,这个空间是多大呢,很简单。计算公式为:

  • 800*400*4=1,280,000=1.28MB,也就是开辟1.3MB的空间就行

3.3 RGBLCD的控制

  上面已经将RGBLCD基本信息介绍完毕,剩下的就是对RGBLCD的控制,这里控制有两种,一种是软件模拟控制,另外一种就是硬件接口的配置控制,由于IMX6ULL芯片带有RGBLCD的硬件控制接口DOTCLK 接口 ,因此我们可以通过配置IMX6ULL的寄存器来实现相关信号的产生;本质就是要实现与时序图一样的控制流程

3.3.1 DOTCLK 硬件接口的时序控制

  由于不同的RGB屏幕的有些时间值是不确定的,例如行同步信号后肩的时间长度就不一致,因此在硬件接口中这些都是可以选择性的控制,所以硬件接口的时序和RGB屏幕的时序只是有些许兼容性的差别,其他的都是一样的,其时序图如下:

  所以到目前为止关于RGBLCD配置的前期原理相关知识储备已经完毕,剩下的就是配置IMX6ULL的相关寄存器产生上述的时序,重点就是关于VSPW,VBP,LINE,VFB,HSPW,HBP,HOZVAL,HFP这八个时间的配置,而且还有模式选择、时钟信号、分辨率、像素格式等待,因此牵扯的寄存器较多,有兴趣的可以根据程序揣摩;这部分的内容可以单开一个系类了;但是其大体上的配置思路如下:
在这里插入图片描述

  1. 初始化相关的GPIO
  2. LCD复位及停止复位
  3. 打开LCD的时钟
  4. LCD的参数写入和控制命令寄存器的配置
  5. LCD使能
  6. 清理屏幕

3.4 RGBLCD的控制代码实现

/*屏幕参数结构体变量*/
tftlcd_typedef_t tftlcd_dev;
/*初始化LCD函数*/
void lcd_init(void)
{
    /*初始化屏幕IO*/
    lcdgpio_init();
    lcd_reset();
    delay_ms(10);
    lcd_noreset(); /*停止复位*/
    /*根据不同的屏幕ID设置不同的屏幕参数*/
	tftlcd_dev.height = 480;	
	tftlcd_dev.width = 800;
	tftlcd_dev.vspw = 3;
	tftlcd_dev.vbpd = 32;
	tftlcd_dev.vfpd = 13;
	tftlcd_dev.hspw = 48;
	tftlcd_dev.hbpd = 88;
	tftlcd_dev.hfpd = 40;
	lcdclk_init(42, 4, 8);	/* 初始化LCD时钟 31.5MHz */
    tftlcd_dev.pixsize=4;/*每个像素4个字节*/
    tftlcd_dev.framebuffer=LCD_FRAMEBUFFER;
    tftlcd_dev.forecolor=LCD_BLACK;           /*前景色,自己进行计算,这里先用为红色*/
    tftlcd_dev.backcolor=LCD_WHITE;          /*背景色设置为白色*/
    /*配置LCD接口控值器接口*/
    LCDIF->CTRL  = 0;/*清零*/
	LCDIF->CTRL |= (1 << 19) | (1 << 17) | (0 << 14) | (0 << 12) |
	 				(3 << 10) | (3 << 8) | (1 << 5) | (0 << 1);
    /*设置CTR1寄存器*/
	LCDIF->CTRL1=0;
    LCDIF->CTRL1 = (7<<16);
    LCDIF->TRANSFER_COUNT = 0;
    LCDIF->TRANSFER_COUNT = (tftlcd_dev.height<<16)|(tftlcd_dev.width<<0);/*有多少行,低16位*/
    LCDIF->VDCTRL0=0;
    LCDIF->VDCTRL0 = (tftlcd_dev.vspw<<0)|(1<<20)|(1<<21)|(1<<24)|(0<<25)|(0<<26)|(0<<27)|(1<<28)|(0<<29);
    LCDIF->VDCTRL1 = tftlcd_dev.vspw+tftlcd_dev.vbpd+tftlcd_dev.height+tftlcd_dev.vfpd;
    LCDIF->VDCTRL2 = (tftlcd_dev.hspw<<18)|(tftlcd_dev.hspw+tftlcd_dev.hbpd+tftlcd_dev.width+tftlcd_dev.hfpd);
    LCDIF->VDCTRL3 = (tftlcd_dev.vspw+tftlcd_dev.vbpd) | ((tftlcd_dev.hspw+tftlcd_dev.hbpd)<<16);

    LCDIF->VDCTRL4 = (tftlcd_dev.width)|(1<<18);

    LCDIF->CUR_BUF = (unsigned int)tftlcd_dev.framebuffer;  
    LCDIF->NEXT_BUF = (unsigned int)tftlcd_dev.framebuffer;
    /*使能LCD ENABLE*/
    lcd_enable();
	delay_ms(10);
    lcd_clear(LCD_WHITE);
}

/*复位LCD控制器*/
void lcd_reset(void)
{
    LCDIF->CTRL = (1<<31);
}
/*停止屏幕复位*/
void lcd_noreset(void)
{
    LCDIF->CTRL = (0<<31); 
}
/*使能LCD控制器*/
void lcd_enable(void)
{
   LCDIF->CTRL |= (1<<0);
}
/*屏幕IO初始化*/
void lcdgpio_init(void)
{
	gpio_pin_config_t gpio_config;
	/* 1、IO初始化复用功能 */
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA00_LCDIF_DATA00,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA01_LCDIF_DATA01,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA02_LCDIF_DATA02,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA03_LCDIF_DATA03,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA04_LCDIF_DATA04,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA05_LCDIF_DATA05,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA06_LCDIF_DATA06,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA07_LCDIF_DATA07,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA08_LCDIF_DATA08,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA09_LCDIF_DATA09,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA10_LCDIF_DATA10,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA11_LCDIF_DATA11,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA12_LCDIF_DATA12,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA13_LCDIF_DATA13,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA14_LCDIF_DATA14,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA15_LCDIF_DATA15,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA16_LCDIF_DATA16,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA17_LCDIF_DATA17,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA18_LCDIF_DATA18,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA19_LCDIF_DATA19,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA20_LCDIF_DATA20,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA21_LCDIF_DATA21,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA22_LCDIF_DATA22,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_DATA23_LCDIF_DATA23,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_CLK_LCDIF_CLK,0);	
	IOMUXC_SetPinMux(IOMUXC_LCD_ENABLE_LCDIF_ENABLE,0);	
	IOMUXC_SetPinMux(IOMUXC_LCD_HSYNC_LCDIF_HSYNC,0);
	IOMUXC_SetPinMux(IOMUXC_LCD_VSYNC_LCDIF_VSYNC,0);
	IOMUXC_SetPinMux(IOMUXC_GPIO1_IO08_GPIO1_IO08,0);	/* 背光BL引脚      */
	IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0xF080);		
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA00_LCDIF_DATA00,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA01_LCDIF_DATA01,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA02_LCDIF_DATA02,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA03_LCDIF_DATA03,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA04_LCDIF_DATA04,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA05_LCDIF_DATA05,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA06_LCDIF_DATA06,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA07_LCDIF_DATA07,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA08_LCDIF_DATA08,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA09_LCDIF_DATA09,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA10_LCDIF_DATA10,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA11_LCDIF_DATA11,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA12_LCDIF_DATA12,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA13_LCDIF_DATA13,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA14_LCDIF_DATA14,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA15_LCDIF_DATA15,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA16_LCDIF_DATA16,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA17_LCDIF_DATA17,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA18_LCDIF_DATA18,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA19_LCDIF_DATA19,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA20_LCDIF_DATA20,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA21_LCDIF_DATA21,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA22_LCDIF_DATA22,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_DATA23_LCDIF_DATA23,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_CLK_LCDIF_CLK,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_ENABLE_LCDIF_ENABLE,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_HSYNC_LCDIF_HSYNC,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_LCD_VSYNC_LCDIF_VSYNC,0xB9);
	IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO08_GPIO1_IO08,0xB9);	/* 背光BL引脚 		*/
	/* GPIO初始化 */
	gpio_config.direction = kGPIO_DigitalOutput;			/* 输出 			*/
	gpio_config.outputLogic = 1; 							/* 默认关闭背光 */
	gpio_init(GPIO1, 8, &gpio_config);						/* 背光默认打开 */
	gpio_pinwrite(GPIO1, 8, 1);								/* 打开背光     */
}

/*像素时钟初始化*/
/*不使用分子和分母,即小数分频器设置为0
loopdiv:27-54可选范围,即DIV_SECLECT寄存器
prediv:设置为1-8分频:实际的值为-1;便于理解
div:设置1-8分频:实际的值为-1,应为0代表的是1分频;
LCD_CLK=24*loopdiv/prediv/prediv
*/
void lcdclk_init(unsigned char loopdiv,unsigned char prediv,unsigned char div)
{
    /*不使用小数分频器*/
    CCM_ANALOG->PLL_VIDEO_NUM = 0;
    CCM_ANALOG->PLL_VIDEO_DENOM=0;
    /*设置DIV寄存器*/
    CCM_ANALOG->PLL_VIDEO  = (1<<13)|(2<<19)|(loopdiv<<0);
    CCM_ANALOG->MISC2   &= ~(3<<30);
	/*这里的目的是把bit17-15变为011,是我只把最高位清零,把中间的置1,但是bit15如果原来是1的话,就不能选择正确的时钟*/
    CCM->CSCDR2  &= ~(1<<17);
    CCM->CSCDR2  |= (2<<15);   /*四路时钟选择器*/  
	CCM->CSCDR2  &= ~(1<<15);
    CCM->CSCDR2 &=~(7<<12);
    CCM->CSCDR2 |= ((prediv-1)<<12);
    CCM->CBCMR  &= ~(7<<23);
    CCM->CBCMR  |= ((div-1)<<23);
    CCM->CSCDR2 &= ~(7<<9);/*选择时钟源*/
	CCM->CSCDR2 |= (0 << 9);					/* LCDIF_PRE时钟源选择LCDIF_PRE时钟 */
}
/* 打点函数*/
inline void lcd_drawpoint(unsigned short x,unsigned short y,unsigned int color)
{ 
  	*(unsigned int*)((unsigned int)tftlcd_dev.framebuffer + 
		             tftlcd_dev.pixsize * (tftlcd_dev.width * y+x))=color;
}
/*读点函数*/
inline unsigned int lcd_readpoint(unsigned short x,unsigned short y)
{
    return *(unsigned int*)((unsigned int )tftlcd_dev.framebuffer+tftlcd_dev.pixsize*(tftlcd_dev.width*y+x));
}
/*清理屏幕内容,清屏函数*/
void lcd_clear(unsigned int color)
{
    unsigned int num;
    unsigned int i=0;
    unsigned int *startaddr=(unsigned int *)tftlcd_dev.framebuffer;
    num  = (unsigned int)tftlcd_dev.width*tftlcd_dev.height;
    for(i=0;i<num;i++)
    {
        startaddr[i]=color;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring注解解析:条件注解@Condition注解和@ConditonOnXXX注解

文章目录 一、条件注解二、Conditional1、使用方法2、示例 一、条件注解 条件注解的作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所…

.NET 分享一款Web打包和解压缩工具

01本文概要 在.NET部署环境中&#xff0c;利用IIS中间件开启对ASP的支持&#xff0c;可以实现许多强大的文件操作功能。特别是在一些需要进行预编译的情况下&#xff0c;通过上传ASP脚本&#xff0c;可以获得WebShell&#xff0c;从而方便地进行各种操作。本文将介绍一个名为S…

运动耳机怎么选?五款新手必买的运动耳机盘点

运动耳机是专为运动爱好者设计的耳机&#xff0c;轻巧便携&#xff0c;佩戴稳固。无论你在跑步、健身还是骑行&#xff0c;它都能为你带来优质的音乐体验。那如何选择一款合适的运动耳机呢&#xff1f;这里&#xff0c;我结合自己和身边朋友平时选购经验&#xff0c;整理了一些…

sklearn机器学习编程练习大全(二)

sklearn机器学习编程练习大全&#xff08;二&#xff09; 第11题 从字符串提取标签第12题 IRIS数据集探索第13题 构建模型&#xff0c;计算准确率第14题 预估目标列编码第15题 one-hot编码 第11题 从字符串提取标签 DataFrame如下&#xff1a; 如何将以上的DataFrame变成如下的…

python批量生成25位数字字母混合序列号(SN码)

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 SN码,即Serial Number的缩写,有时也被称为Serial No,是产品序列号的意思。它是一个独特的标识符,用于区分同一种类

第二证券资讯|昨夜,黄金大涨、美股创新高!人民币狂拉

受降息预期影响&#xff0c;美股三大指数团体创新高&#xff0c;黄金期现价格亦大幅走高。 当地时间5月15日星期三&#xff0c;美股三大股指全线收涨。道指涨0.88%&#xff0c;纳指涨1.40%&#xff0c;标普500指数涨1.17%。 经济数据方面。美国4月CPI同比上涨3.4%&#xff0c…

每日一练 2025.5.16

题目&#xff1b; 给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。注意: 给定数字的范围是 [0, 108] 解题&#…

首战告捷!KCM Trade漂移队出征2024日本漂移锦标赛(FDJ2)

卓越之姿&#xff0c;非凡之势&#xff01;KCM Trade漂移队以实力点燃激情 当激情与速度交织&#xff0c;当硝烟四起的战场转移到赛车领域&#xff0c;我们见证了一场精彩绝伦、实力与策略并存的较量——KCM Trade漂移队在2024日本漂移锦标赛&#xff08;FDJ2&#xff09;上展现…

AIGC文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片&#xff0c;它具备精确恒压和恒流的同步降压能力&#xff0c;适用于多种应用场景&#xff0c;如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整&#xff1a; H4112支持输出电压在2.5V到2…

大模型时代,交换机技术演变、性能分析、衡量指标

OSI协议及在高性能计算中向RDMA的过渡 协议是为计算机网络内的数据交换而建立的一组规则、标准或协议。在法律层面&#xff0c;OSI七层协议被视为国际标准。该协议于20世纪80年代引入&#xff0c;旨在通过其七层网络模型标准化计算机间通信&#xff0c;以满足开放网络的要求。…

wamp 安装 PHP8

最近的项目需求&#xff0c;需要将PHP 升级8使用&#xff0c;一直都是用wamp &#xff0c;所以需要在wamp集成PHP8 1、首先下载 php8 的包。地址&#xff1a; PHP: Downloadshttps://www.php.net/downloads.php 下载版本是目前最新的 PHP8.3.7&#xff0c;不要下载nts 版本&a…

【MySQL精通之路】MySQL8.0官方文档-数据字典

目录 16.1 数据字典架构 如何升级数据字典 使用MySQL的调试版本查看数据字典表 16.2 删除基于文件的元数据存储 .frm文件 .par文件 .TRN文件 .TRG文件 .isl文件 db.opt文件 ddl_log.log文件 16.3 字典数据的事务存储 16.4 字典对象缓存 表空间定义缓存分区&#…

HTML(3)——常用标签3

引用标签 1.<blockquote>和<q> 两者都是对文本的解释引用&#xff0c;<blockquote>是用较大的段落进行解释&#xff0c;<q>是对较小的段落进行解释。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

人工智能(一)架构

一、引言 人工智能这个词不是很新鲜&#xff0c;早就有开始研究的&#xff0c;各种推荐系统、智能客服都是有一定的智能服务的&#xff0c;但是一直都没有体现出多高的智能性&#xff0c;很多时候更像是‘人工智障’。 但是自从chatGpt3被大范围的营销和使用之后&#xff0c;人…

提升工作效率,畅享Microsoft Office 2016 for Mac/win软件

Microsoft Office 2016 for Mac/win是一款功能强大的办公软件套件&#xff0c;为用户提供了一系列高效、易用的工具&#xff0c;帮助您在工作和学习中更加高效地处理各种任务。无论您是学生、职场人士还是企业管理者&#xff0c;这款软件都能满足您的各种需求。 首先&#xff…

霍庭格TruPlasma MF 7100 7050电源现货50KW

霍庭格TruPlasma MF 7100 7050电源现货50KW

MPLS小实验

实验图&#xff1a; 实验要求&#xff1a; 要求使用MPLS技术&#xff0c;将实验通&#xff0c;并在实验结束后使用命令&#xff1a;tracert -v -a 看是否基于标签进行转发。 如上&#xff1a;在每台路由器上都有两个环回&#xff0c;一个用于模拟用户网段&#xff0c;一个用于M…

计算机毕业设计 | vue+springboot电影票售卖 影院售票商城 电影管理系统(附源码+论文)

1&#xff0c;项目背景 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的电影院购票选座系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于vue和SpringBoot框架下开发&#xff1b;管理员通过后台管理系统实现管理影院信息&#xff0c;电影信息&…

双向链表结构

1.双向链表定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接前驱和直接后继。 2.实现双向链表 2.1创建双向链表类 /*** 基于双向链表实现元素存取的容器* param <E>*/ public class MyDoubleLinked…