44.Linux君正X1000-添加st7789v显示

article/2025/10/6 13:41:56

由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD

它们两个屏的区别在于初始化屏的参数不同,引脚都一样,也就是说需要使板子同时支持ili9335型号和st7789v型号

思路:

  • 1.uboot在显示LOG(初始化屏参数)之前,通过命令来读LCD型号,来检测LCD型号,然后来修改初始化屏的参数.
  • 2.如果屏是新屏,则设置bootargs,向内核传递参数lcd_type=new
  • 3.当kernel收到参数lcd_type=new时,则在初始化LCD之前,修改屏的参数.

改uboot

首先来看单板配置信息,根据配置找到哪个文件是初始化LCD屏的

根据make ap60pro_uImage_sfc_nand命令,找ap60pro_uImage_sfc_nand单板信息

vi   ./u-boot/boards.cfg    

找到:

# Target      ARCH   CPU   Board name  Vendor     SoC    Options
##############################################################
ap60pro_uImage_sfc_nand      mips        xburst      ap60pro       ingenic    x1000   ap60pro:SPL_SFC_NAND,LIBSLEEP,GET_BT_MAC

从上面看到board name为ap60pro,所以最终通过下面几个来初始化: 

./arch/mips/cpu/xburst\x1000\start.S    //启动代码
./include/configs/ap60pro.h             //各种define配置
./board/ingenic/ap60pro                 //单板配置源文件        

查看ap60pro.h,查看LCD相关的define配置

查找CONFIG_ILI9335_240X320,找到在./board/ingenic/ap60pro/Makefile里调用:

COBJS-$(CONFIG_ILI9335_240X320) += lcd-ili9335_240x320.o    //保存LCD初始化参数的信息

查找CONFIG_ILI9335_240X320,找到在./drivers/video/Makefile里调用:

COBJS-$(CONFIG_JZ_LCD_V13) +=  jz_lcd/jz_lcd_v13.o        //根据lcd-ili9335_240*320.c来初始化LCD

修改lcd-ili9335_240x320.c

添加st7789v初始化的数组表(在代码中以New_ili9335_data_table数组表示):

struct smart_lcd_data_table ili9335_data_table[] = {    //旧屏的初始化参数表
{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0xec},{SMART_CONFIG_DATA,0x1e},{SMART_CONFIG_DATA,0x8f},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x01},{SMART_CONFIG_DATA,0x01},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x02},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x03},{SMART_CONFIG_DATA,0x10},{SMART_CONFIG_DATA,0x30},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x08},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x09},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x0a},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x08}, //enable te{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x0d},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x0f},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x60},{SMART_CONFIG_DATA,0x27},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x61},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x6a},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x10},{SMART_CONFIG_DATA,0x16},{SMART_CONFIG_DATA,0x90},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x11},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x27},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x12},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x0d},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x21},{SMART_CONFIG_DATA,0x16},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x29},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x18},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x2b},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x0a},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x20},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x21},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},//============Gamma============{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x30},{SMART_CONFIG_DATA,0x04},{SMART_CONFIG_DATA,0x03},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x31},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x07},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x32},{SMART_CONFIG_DATA,0x04},{SMART_CONFIG_DATA,0x04},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x35},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x36},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x0f},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x37},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x03},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x38},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x39},{SMART_CONFIG_DATA,0x03},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x3c},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x3d},{SMART_CONFIG_DATA,0x0f},{SMART_CONFIG_DATA,0x00},//=============================// set RAM address{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x50},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x51},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0xef},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x52},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x53},{SMART_CONFIG_DATA,0x01},{SMART_CONFIG_DATA,0x3f},{SMART_CONFIG_UDELAY,10000},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x80},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x81},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x82},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x83},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x84},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x85},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x90},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x10},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x91},{SMART_CONFIG_DATA,0x06},{SMART_CONFIG_DATA,0x00},//display on{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x07},{SMART_CONFIG_DATA,0x01},{SMART_CONFIG_DATA,0x33},{SMART_CONFIG_CMD,0x00},{SMART_CONFIG_CMD,0x22},};unsigned long truly_cmd_buf[]= {0x22002200,
};
struct jzfb_config_info jzfb1_init_data = {.num_modes = 1,.modes = &jzfb1_videomode,.lcd_type = LCD_TYPE_SLCD,.bpp    = 24,                            //R8G8B8.pinmd  = 0,.smart_config.rsply_cmd_high       = 0,.smart_config.csply_active_high    = 0,/* write graphic ram command, in word, for example 8-bit bus, write_gram_cmd=C3C2C1C0. */.smart_config.newcfg_fmt_conv =  0,.smart_config.clkply_active_rising = 1,.smart_config.data_times = 2,.smart_config.write_gram_cmd = truly_cmd_buf,.smart_config.length_cmd = ARRAY_SIZE(truly_cmd_buf),.smart_config.bus_width = 8,                                    //总线8位的.smart_config.length_data_table =  ARRAY_SIZE(ili9335_data_table),.smart_config.data_table = ili9335_data_table,.dither_enable = 1,
};//新屏的初始化参数表
static struct smart_lcd_data_table New_ili9335_data_table[] = {{SMART_CONFIG_CMD,0x11},{SMART_CONFIG_UDELAY,120000},    //Sleep out{SMART_CONFIG_CMD,0x36},                //控制{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_CMD,0x21},    //0x13显示不反转 ,21h 反显{SMART_CONFIG_CMD,0x3A},{SMART_CONFIG_DATA,0x05},{SMART_CONFIG_CMD,0x2A},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0xEF},{SMART_CONFIG_CMD,0x2B},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x01},{SMART_CONFIG_DATA,0x3F},{SMART_CONFIG_CMD,0xB2},        //前后肩{SMART_CONFIG_DATA,0x0C},{SMART_CONFIG_DATA,0x0C},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x33},{SMART_CONFIG_DATA,0x33},{SMART_CONFIG_CMD,0xB7},     //VGH VGL{SMART_CONFIG_DATA,0x35},{SMART_CONFIG_CMD,0xBB},     //VCOM {SMART_CONFIG_DATA,0x1E},{SMART_CONFIG_CMD,0xC0},      //LCM{SMART_CONFIG_DATA,0x2C},{SMART_CONFIG_CMD,0xC2},{SMART_CONFIG_DATA,0x01},{SMART_CONFIG_CMD,0xC3},     //VRH( vcom+vcom offset+vdv) {SMART_CONFIG_DATA,0x27},{SMART_CONFIG_CMD,0xC4},     //vdv{SMART_CONFIG_DATA,0x20},{SMART_CONFIG_CMD,0xC6},        //帧率{SMART_CONFIG_DATA,0x0F},{SMART_CONFIG_CMD,0xD0},        //功率控制模式   {SMART_CONFIG_DATA,0xA4},{SMART_CONFIG_DATA,0xA1},{SMART_CONFIG_CMD,0xE0},        //正GAMMA {SMART_CONFIG_DATA,0xD0},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x05},{SMART_CONFIG_DATA,0x03},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x07},{SMART_CONFIG_DATA,0x3F},{SMART_CONFIG_DATA,0x55},{SMART_CONFIG_DATA,0x50},{SMART_CONFIG_DATA,0x09},{SMART_CONFIG_DATA,0x14},{SMART_CONFIG_DATA,0x15},{SMART_CONFIG_DATA,0x22},{SMART_CONFIG_DATA,0x25},{SMART_CONFIG_CMD,0xE1},    //负GAMMA{SMART_CONFIG_DATA,0xD0},{SMART_CONFIG_DATA,0x00},{SMART_CONFIG_DATA,0x05},{SMART_CONFIG_DATA,0x03},{SMART_CONFIG_DATA,0x02},{SMART_CONFIG_DATA,0x07},{SMART_CONFIG_DATA,0x3F},{SMART_CONFIG_DATA,0x55},{SMART_CONFIG_DATA,0x54},{SMART_CONFIG_DATA,0x0C},{SMART_CONFIG_DATA,0x18},{SMART_CONFIG_DATA,0x14},{SMART_CONFIG_DATA,0x22},{SMART_CONFIG_DATA,0x25},{SMART_CONFIG_CMD,0x11},    // sleep out{SMART_CONFIG_UDELAY,120000},{SMART_CONFIG_CMD,0x29},//Display On{SMART_CONFIG_UDELAY,20000},
};
unsigned long New_truly_cmd_buf[]= {0x2C2C2C2C,
};void switch_lcd_New(void)              //切换为ST7789V
{jzfb1_init_data.smart_config.data_table = New_ili9335_data_table;jzfb1_init_data.smart_config.length_data_table =  ARRAY_SIZE(New_ili9335_data_table);jzfb1_init_data.smart_config.write_gram_cmd = New_truly_cmd_buf; 
}
//... ...

查看jz_lcd_v13.c调用顺序

从uboot启动时,调用board_init_r()函数开始:

 -> board_init_r()-> stdio_init()-> drv_lcd_init()                //初始化硬件LCD-> drv_video_init()             //绘制log

其中drv_lcd_init()中调用顺序为:

 -> drv_lcd_init()-> lcd_init()-> lcd_ctrl_init()                 // 位于drivers\video\jz_lcd\Jz_lcd_v13.c

所以,接下来,我们便来修改jz_lcd_v13.c,让uboot在初始化LCD之前,读LCD的ID,是否需要切换新屏参数

修改jz_lcd_v13.c

由于X1000的SLCD控制寄存器只能向LCD写命令/数据,没有读数据的寄存器,所以我们便需要使用GPIO来模拟时序,读出ID来

参考ST7789V数据手册,找到ID命令为04h:

参考ST7789V数据手册,找到读写8080时序图:

接下来开始改代码: 

//添加下面函数,通过GPIO模拟LCD寄存器,来实现读ID
void  gpio_setfunc(unsigned int gpioPort,enum gpio_function fun)
{enum gpio_port port; switch((gpioPort /32)){case 0:    port = GPIO_PORT_A; break;case 1:    port = GPIO_PORT_B; break;case 2:    port = GPIO_PORT_C; break;case 3:    port = GPIO_PORT_D; break;default:port = GPIO_NR_PORTS;   break;}gpio_set_func(port, fun, 1<< (gpioPort % 32));if(fun == GPIO_OUTPUT0||fun == GPIO_OUTPUT1)  {if(fun == GPIO_OUTPUT0)gpio_direction_output(gpioPort, 0);     elsegpio_direction_output(gpioPort, 1);      }
}static void write_SLCD_CD(int isCOMD,unsigned int value) //写命令/数据
{#define  SLCD_DC    20#define  SLCD_WR   17#define  SLCD_RD    16#define  SLCD_CS     18int i;gpio_direction_output(GPIO_PB(SLCD_CS), 1);     for( i=0;i<8;i++){gpio_setfunc(GPIO_PA(i),GPIO_OUTPUT0);gpio_direction_output(GPIO_PA(i), (value>>i)&0x01);     }mdelay(10);if(isCOMD!=0)    //如果是写命令,则拉低DC脚{gpio_direction_output(GPIO_PB(SLCD_DC), 0);    }else{gpio_direction_output(GPIO_PB(SLCD_DC),1);    }gpio_direction_output(GPIO_PB(SLCD_WR), 0);     gpio_direction_output(GPIO_PB(SLCD_RD), 1);     gpio_direction_output(GPIO_PB(SLCD_CS), 0);     mdelay(4);gpio_direction_output(GPIO_PB(SLCD_WR), 1);     mdelay(7);
}static unsigned int read_SLCD_DATA(void)   //读数据
{#define  SLCD_DC    20#define  SLCD_WR   17#define  SLCD_RD    16#define  SLCD_CS     18int i;int ret=0;gpio_direction_output(GPIO_PB(SLCD_CS), 1);     //取消片选for( i=0;i<8;i++)        //将data脚设为输入脚{gpio_setfunc(GPIO_PA(i),GPIO_INPUT); }gpio_direction_output(GPIO_PB(SLCD_DC), 1);     gpio_direction_output(GPIO_PB(SLCD_WR), 1);     gpio_direction_output(GPIO_PB(SLCD_RD), 0);     gpio_direction_output(GPIO_PB(SLCD_CS), 0);     //选中片选mdelay(4);gpio_direction_output(GPIO_PB(SLCD_RD), 1);     for( i=0;i<8;i++)ret|=(gpio_get_value(GPIO_PA(i))<<i);mdelay(7);return ret;
}static void lcd_func_init(int isRestore){int i,n;#define  SLCD_DC    20#define  SLCD_WR   17#define  SLCD_RD    16#define  SLCD_TE     19            //input#define  SLCD_CS     18if(isRestore)                                //恢复管脚为LCD控制寄存器{for(i=0;i<8;i++)gpio_setfunc(GPIO_PA(i),GPIO_FUNC_1);gpio_setfunc(GPIO_PB(SLCD_DC),GPIO_FUNC_1);gpio_setfunc(GPIO_PB(SLCD_WR),GPIO_FUNC_1);gpio_setfunc(GPIO_PB(SLCD_RD),GPIO_FUNC_1);gpio_setfunc(GPIO_PB(SLCD_TE),GPIO_FUNC_1);gpio_setfunc(GPIO_PB(SLCD_CS),GPIO_FUNC_1);}else                          //设置为普通IO管脚{for(i=0;i<8;i++)gpio_setfunc(GPIO_PA(i),GPIO_OUTPUT0);gpio_setfunc(GPIO_PB(SLCD_DC),GPIO_OUTPUT0);gpio_setfunc(GPIO_PB(SLCD_WR),GPIO_OUTPUT0);gpio_setfunc(GPIO_PB(SLCD_RD),GPIO_OUTPUT0);gpio_setfunc(GPIO_PB(SLCD_TE),GPIO_INPUT);gpio_setfunc(GPIO_PB(SLCD_CS),GPIO_OUTPUT0);}mdelay(200);
}static u8 Read_ID_isNewLcd(void)
{#define  SLCD_DC    20#define  SLCD_WR   17#define  SLCD_RD    16#define  SLCD_TE     19            //input#define  SLCD_CS     18u8 ret = 0;u8 IDH,IDL;lcd_func_init(0);   //设置LCD相关的引脚,设置为普通IO脚write_SLCD_CD(1,0x04);  //写入0x04命令IDH = read_SLCD_DATA();IDL = read_SLCD_DATA();printf("Read ID: 0x%X 0x%X\r\n",IDH,IDL);IDH = read_SLCD_DATA();IDL = read_SLCD_DATA();printf("Read ID: 0x%X 0x%X\r\n",IDH,IDL);         if(IDL!=0x52)          //如果值!=0X52,则表示是旧屏ili9335{ret =1;}lcd_func_init(1);    //将lcd相关引脚配置为LCD控制脚mdelay(10);return ret;
}extern void switch_lcd_New(void) ;
static int lcd_type_isNew=0; 
void set_lcd_type_from_cmdline(void)   //设置bootargs,向内核传递lcd_type参数
{if(lcd_type_isNew)    {run_command("set  bootargs "CONFIG_BOOTARGS" lcd_type=new ", 0);}}//在lcd_ctrl_init()函数里添加读ID函数
void lcd_ctrl_init(void *lcd_base)
{if(Read_ID_isNewLcd()==0)        //读ID,检测是否是新屏{printf("Read_ID_isNewLcd=0\r\n"); switch_lcd_New();     //调用Lcd-ili9335_240x320.c的切换新屏参数的函数lcd_type_isNew=1;    }  //... ... 后面的代码不需要修改,因为后面便会根据LCD初始化参数表.来初始化LCD
}

上面的set_lcd_type_from_cmdline()函数需要在后面调用main_loop()的时候之前被调用,所以还需要修改board_init_r()函数(arch\mips\lib\Board.c ).

然后装上旧屏ili9335,启动uboot,查看读的屏幕ID,屏幕显示正常:

然后换为新屏,启动uboot,查看读的ID信息,log显示正常:

启动内核时,也可以看到传递给内核bootargs有我们新添的参数:​​​​​​​

然后在内核中,便通过新参数再次设置屏参数表即可.


http://chatgpt.dhexx.cn/article/KAL37cmS.shtml

相关文章

HaaS100硬件规格

硬件配置 类别 参数 CPU 型号 HaaS 1000 架构 Cortex M33 主频 300MHz 片上Flash 16MB 内存 2.5MB SRAM 16MB PSRAM 硬件接口 类别 数量 性能指标 TF 卡槽 1个 最大支持 64GB RS485 1路 波特率支持1200bps ~ 115200bps RS232 1路 波特率最高支…

X1000对于CPU Core的参数解读(MIPS Cache)

各自摘抄整合&#xff0c;大多来自互联网&#xff0c;链接已全部放出来 1.MIPS-Based XBurst cores (up to 1.0GHz) 基于MIPS的XBurst核(最高可达1.0GHz) MIPS架构  XBurst是北京君正针对移动多媒体便携产品推出的一种创新的32位嵌入式CPU技术&#xff0c;它重新定义了32位嵌…

主控芯片成功案例:搭载北京君正X1000芯片,收款计算合二为一

具体硬件方面&#xff0c;商米码利奥Mini搭载了北京君正X1000芯片&#xff0c;该芯片具有性能强、功耗低的特点&#xff0c;主频可以达到1GHz &#xff0c;支持1秒极速启动&#xff0c;内置LPDDR&#xff08;X1000&#xff1a;32MB&#xff0c;X1000E&#xff1a;64MB&#xff…

【以太网硬件九】1000base-X是什么?

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 说完千兆以太网电口&#xff0c;我们再来研究一下千兆光口的物理层规范。 千兆以太网…

比A100性能高4.5倍!英伟达H100横扫AI推理基准测试

视学算法报道 编辑&#xff1a;武穆 【导读】NVIDIA H100 Tensor Core GPU在MLPerf行业标准AI基准测试中首次亮相&#xff0c;创下了所有工作负载推理的世界纪录&#xff0c;提供的性能比上一代GPU高4.5 倍。 不久前&#xff0c;英伟达公布了旗下的芯片&#xff0c;在MLPerf行…

君正 X1000 音频驱动架构

X1000 音频驱动架构笔记 使用开发板X1000_HALLEY2_V2.0&#xff0c;源码为北京君正官方源码V7.0版本&#xff0c;与V6.0无太多差异 项目中遇到的问题 这是内核源码中设置所导致的&#xff0c;可能官方认为X1000这样设置会最好&#xff0c;可是我们需要小于30MS 的周期设置&…

华为metro1000描述,optix metro1000参数-华讯佳科技

OptiX Metro1000传输设备(简称Metro1000&#xff09;是华为技术有限公司研发的STM-1/STM-4/STM-16级别的盒式设备。华为Metro1000光端机主要应用于城域网、本地传输网接入层&#xff0c;具备结构简洁、集成度高等许多特点。 Metro1000光端机是华为技术有限公司开发的STM-1/STM-…

扔掉老破V100、A100,英伟达新一代计算卡H100来了

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

君正X1000开发板/方案开发介绍

君正X1000芯片开发板/方案开发&#xff0c;或者需要相关开发资料&#xff0c;如规格书&#xff0c;硬件设计&#xff0c;原理图等&#xff0c;可到一牛网论坛 X1000主要技术指标及特点 处理器 Ingenic X1000, 1.0GHz, 集成32Mbytes LPDDR 存储 16MBytes&#xff0c;4线SPI …

君正X1000平台内核SPI接口使用

一. 平台环境 开发板 X1000_HALLEY2_BASEBOARD_V4.1源码版本 ingenic-linux-kernel3.10.14-x1000-v8.2-20181116 二. 源码编译&#xff1a; 参照《v1000_v8.2版本编译_20181116》&#xff0c;可整体进行编译&#xff08;即同时编译生成x.bin,kernel镜像文件&#xff0c;文件…

算法工程师的职业发展前景思考和总结

本篇文章结合职友集数据对数据工程师【dba】通过个人理解和对职业行情现状进行个人主观总结。 声明&#xff1a;仅供参考&#xff0c;不是绝对&#xff0c;因人而异。 日期&#xff1a;2022年6月1日 作者&#xff1a;任聪聪 了解什么是算法工程师 首先算法工程师就是&#xff…

Python实现xls、xlsx文件内容替换的自定义函数

本篇文章主要讲解通过python批量替换xls、xlsx文件中的字符串的函数代码实例教程 日期:2023年5月9日 作者:任聪聪 版本:python3.9 前提准备 安装:xlrd,xlwt,openpyxl pip install 包名引入: import xlrd,xlwt,openpyxl实际效果: 可批量替换xls、xlsx两种文件类型,效…

Python实现doc、docx批量文本内容替换的代码实例

本篇文章主要讲解通过python及三方库实现doc、docx的批量文本内容替换的方法教程 日期:2023年5月10日 作者:任聪聪 python3.9版本 前提准备 安装: docx、win32 pip install 包名引入: import win32com.client as win32 import docx实际效果 可以修改doc、docx中包含图片…

程序员该怎么创业才比较靠谱?

本篇文章&#xff1a;主要讲解粉丝后台提问&#xff0c;创业相关问题。 作者&#xff1a;任聪聪 日期&#xff1a;2021年10月19日 宇宙的尽头绝对不是打工&#xff0c;打工是不可能的&#xff0c;程序员打一生的工时赚不到做企业能赚到的钱的。如果你月薪15k&#xff0c;到手11…

thinkphp5 线上部署后view-source:可以看到源码,但是http显示空白页面的原因及解决方法汇总

本篇文章主要讲解:thinkphp5 项目线上部署后view-source:可以看到源码,但是http显示空白页面的原因及解决方法教程 作者:任聪聪 日期:2023年4月17日 thinkphp版本5.1 现象说明: 线下测试环境,显示可以看到界面 部署到线上配置完毕后发现页面空白 在php中写入echo 1232…

AI数据标注工程师这个职业怎么样?

本篇文章主要讲解ai数据标注工程师这个职业的具体情况和相关的职业前景 作者&#xff1a;任聪聪 日期&#xff1a;2023年4月18日 数据是ai的灵魂&#xff0c;自然界中相对应的数据都活多少存在不准确、杂乱、无效等属性&#xff0c;需要人为进行收集、整理、分类和处理。其中ai…

js利用正则提取文本中所有符合的自定义文本内容方法教程

本篇文章主要讲解&#xff0c;使用js提取文本中所有出现的特定字符&#xff0c;保存在数组中并返回的实现方法。 日期&#xff1a;2022年12月9日 作者&#xff1a;任聪聪 一、使用的场景说明 一个超长文本中出现了n个固定规则的字符&#xff0c;但是需要将其进行提取并存在数组…

如何主动增加自己的开源项目star数的方法汇总

本篇文章主要讲解&#xff0c;通过自媒体、短视频、网络平台等渠道形式增加自己的开源项目的曝光度以增加star数的方法。 作者&#xff1a;任聪聪 日期&#xff1a;2023年4月20日 开源项目的star数在某些找工作的情况下是有一定的加分的&#xff0c;故此价值是一定的。但是自己…

【Cocos新手入门】 cocos creator 制作 select下拉框且可以选择获取选中参数数值的方法

本篇文章主要讲解使用cocos creator 制作 select下拉框且可以选择获取选中参数数值的方法。 作者&#xff1a;任聪聪 日期&#xff1a;2023年2月7日 cocos 引擎版本&#xff1a;2.4.3 在我们实现select框的时候&#xff0c;我们可以通过按钮显示隐藏某个元素来达成这个目标&…