RK3568平台 LT9211转接芯片调试笔记

一.简介

龙讯LT9211是一个高性能转换器,支持MIPI LVDS TTL两两之间转换。

使用此款芯片大部分为MIPI与LVDS进行互相转换。

下图为LT9211的典型应用图:

二.LT9211原理图

三.车载显示器和摄像头系统

四.调试LT9211输出 MIPI数据

(1)insmod加载ko文件后,ls /dev 查看是否生成新的video节点。

->如果没有生成video节点,查看ko是否加载失败,dts配置是否正确。

(2)查看设备是否成功挂载在IIC上

->i2cdetect -r -y 5 (lt9211在iic1上地址为ox2b)。

(3)查看LT9211_ChipID寄存器值


void LT9211_ChipID(void)
{
    lt8918_write_reg(0xff,0x81);//register bank
    pr_info("\r\nLT9211 Chip ID:%x,",lt8918_read_reg(0x00));//18
    pr_info("%x, ",lt8918_read_reg(0x01));//1
    pr_info("%x, ",lt8918_read_reg(0x02));//e4
}

(4)检查LT9211打印log

hfp,hbp,hsync,vfp,vbp,vysnc输出正确。

(5)测量mipi信号

MIPI data :1.8V的方波。

图像数据在soc mipi接收过程是需要检测到各个lane的LP11-LP10-LP00的一个状态切换后才会切换

到高速模式准备接收。

(6)确认mipi lane数与硬件连接的是否一致。

五.LT9211MCU程序

/******************************************************************************
  * @project: LT9211
  * @file: lt9211.c
  * @author: zll
  * @company: LONTIUM COPYRIGHT and CONFIDENTIAL
  * @date: 2019.04.10
/******************************************************************************/

#include	"include.h"

u16 hact, vact;
u16 hs, vs;
u16 hbp, vbp;
u16 htotal, vtotal;
u16 hfp, vfp;
u8 VideoFormat=0;
u32 lvds_clk_in = 0;

#define OFFSET 5

struct video_timing *pVideo_Format;

//hfp, hs, hbp, hact, htotal, vfp, vs, vbp, vact, vtotal, pixclk
struct video_timing video_640x480_60Hz     ={ 8, 96,  40, 640,   800, 33,  2,  10, 480,   525,  25000};
struct video_timing video_720x480_60Hz     ={16, 62,  60, 720,   858,  9,  6,  30, 480,   525,  27000};
struct video_timing video_1280x720_60Hz    ={110,40, 220,1280,  1650,  5,  5,  20, 720,   750,  74250};
struct video_timing video_1280x720_30Hz    ={110,40, 220,1280,  1650,  5,  5,  20, 720,   750,  74250};
struct video_timing video_1366x768_60Hz    ={26, 110,110,1366,  1592,  13, 6,  13, 768,   800,  81000};
struct video_timing video_1920x720_60Hz    ={148,44, 88, 1920,  2200, 28,  5,  12, 720,   765,  88000};
struct video_timing video_1920x1080_30Hz   ={88, 44, 148,1920,  2200,  4,  5,  36, 1080, 1125,  74250};
struct video_timing video_1920x1080_60Hz   ={88, 44, 148,1920,  2200,  4,  5,  36, 1080, 1125, 148500};
struct video_timing video_1920x1200_60Hz   ={48, 32,  80,1920,  2080,  3,  6,  26, 1200, 1235, 154000};
struct video_timing video_3840x2160_30Hz   ={176,88, 296,3840,  4400,  8,  10, 72, 2160, 2250, 297000};


void LT9211_ChipID(void)
{
    HDMI_WriteI2C_Byte(0xff,0x81);//register bank
    print("\r\nLT9211 Chip ID:%x,",HDMI_ReadI2C_Byte(0x00));
    print("%x,",HDMI_ReadI2C_Byte(0x01));
    print("%x",HDMI_ReadI2C_Byte(0x02));
}

/** video chk soft rst **/
void lt9211_vid_chk_rst(void)       
{
    HDMI_WriteI2C_Byte(0xff,0x81);	  
    HDMI_WriteI2C_Byte(0x10,0xbe); 
    Timer0_Delay1ms(10);
    HDMI_WriteI2C_Byte(0x10,0xfe); 
}

/** lvds rx logic rst **/
void lt9211_lvdsrx_logic_rst(void)       
{
    HDMI_WriteI2C_Byte(0xff,0x81);	   
    HDMI_WriteI2C_Byte(0x0c,0xeb);
    Timer0_Delay1ms(10);
    HDMI_WriteI2C_Byte(0x0c,0xfb);
}

void LT9211_SystemInt(void)
{
    /* system clock init */		   
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x01,0x18);
    
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x06,0x61); 	
    HDMI_WriteI2C_Byte(0x07,0xa8); //fm for sys_clk
    
    HDMI_WriteI2C_Byte(0xff,0x87); //  ʼ   txpll  Ĵ    б Ĭ  ֵ      
    HDMI_WriteI2C_Byte(0x14,0x08); //default value
    HDMI_WriteI2C_Byte(0x15,0x00); //default value
    HDMI_WriteI2C_Byte(0x18,0x0f);
    HDMI_WriteI2C_Byte(0x22,0x08); //default value
    HDMI_WriteI2C_Byte(0x23,0x00); //default value
    HDMI_WriteI2C_Byte(0x26,0x0f); 
}

void LT9211_LvdsRxPhy(void)
{
    #ifdef INPUT_PORTA
    print("\r\nPort A PHY Config");
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x02,0x8B);   //Port A LVDS mode enable
    HDMI_WriteI2C_Byte(0x05,0x21);   //port A CLK lane swap
    HDMI_WriteI2C_Byte(0x07,0x1f);   //port A clk enable
    HDMI_WriteI2C_Byte(0x04,0xa0);   //select port A clk as byteclk
    //HDMI_WriteI2C_Byte(0x09,0xFC); //port A P/N swap
        
    HDMI_WriteI2C_Byte(0xff,0x86);		
    HDMI_WriteI2C_Byte(0x33,0xe4);   //Port A Lane swap
    #endif
        
    #ifdef INPUT_PORTB
    print("\r\nPort B PHY Config");
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x02,0x88);   //Port A/B LVDS mode enable
    HDMI_WriteI2C_Byte(0x05,0x21);   //port A CLK lane swap and rterm turn-off
    HDMI_WriteI2C_Byte(0x0d,0x21);   //port B CLK lane swap
    HDMI_WriteI2C_Byte(0x07,0x1f);   //port A clk enable  (ֻ  Portbʱ,porta  lane0 clkҪ  )
    HDMI_WriteI2C_Byte(0x0f,0x1f);   //port B clk enable
    //HDMI_WriteI2C_Byte(0x10,0x00);   //select port B clk as byteclk
    HDMI_WriteI2C_Byte(0x04,0xa1);   //reserve
    //HDMI_WriteI2C_Byte(0x11,0x01);   //port B P/N swap
    HDMI_WriteI2C_Byte(0x10,0xfc);
    
    HDMI_WriteI2C_Byte(0xff,0x86);		
    HDMI_WriteI2C_Byte(0x34,0xe4);   //Port B Lane swap
    
    HDMI_WriteI2C_Byte(0xff,0xd8);		
    HDMI_WriteI2C_Byte(0x16,0x80);
    #endif
    
    HDMI_WriteI2C_Byte(0xff,0x81);
    HDMI_WriteI2C_Byte(0x20,0x7f); 	
    HDMI_WriteI2C_Byte(0x20,0xff);  //mlrx calib reset
}

void LT9211_LvdsRxDigital(void)
{	  
    HDMI_WriteI2C_Byte(0xff,0x85);
    HDMI_WriteI2C_Byte(0x88,0x10);      //LVDS input, MIPI output
    
    HDMI_WriteI2C_Byte(0xff,0xd8);

    if(INPUT_PORT_NUM == 1)             //1Port LVDS Input
    {
        HDMI_WriteI2C_Byte(0x10,0x80);
        print("\r\nLVDS Port Num: 1");
    }
    else if(INPUT_PORT_NUM == 2)        //2Port LVDS Input
    {
        HDMI_WriteI2C_Byte(0x10,0x00);
        print("\r\nLVDS Port Num: 2");
    }
    else
    {
        print("\r\nPort Num Set Error");
    } 	

    lt9211_vid_chk_rst();              //video chk soft rst
    lt9211_lvdsrx_logic_rst();         //lvds rx logic rst		
	
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x30,0x45);     //port AB input port sel	 
	
    if(LVDS_FORMAT == JEDIA_FORMAT)
    {
        HDMI_WriteI2C_Byte(0xff,0x85);
        HDMI_WriteI2C_Byte(0x59,0xd0); 	
        HDMI_WriteI2C_Byte(0xff,0xd8);
        HDMI_WriteI2C_Byte(0x11,0x40);
    }
}

int lt9211_lvds_clkstb_check(void)
{
    u8 porta_clk_state = 0;
    u8 portb_clk_state = 0;
    
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x00,0x01);
    Timer0_Delay1ms(300);
    porta_clk_state = (HDMI_ReadI2C_Byte(0x08) & (0x20));
    
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x00,0x02);
    Timer0_Delay1ms(300);
    portb_clk_state = (HDMI_ReadI2C_Byte(0x08) & (0x20));
    
    if(INPUT_PORT_NUM == 1)
    {
        #ifdef INPUT_PORTA
        if( porta_clk_state )
        {
            return 1;
        }
        else
        {
            return 0;
        }
        #endif
        #ifdef INPUT_PORTB
        if( portb_clk_state )
        {
            return 1;
        }
        else
        {
            return 0;
        }
        #endif
    }
    else if(INPUT_PORT_NUM == 2)
    {
        if(porta_clk_state && portb_clk_state)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

void LT9211_ClockCheckDebug(void)
{
#ifdef _uart_debug_
    u32 fm_value;

    lvds_clk_in = 0;
    #ifdef INPUT_PORTA
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x00,0x01);
    Timer0_Delay1ms(50);
    fm_value = 0;
    fm_value = (HDMI_ReadI2C_Byte(0x08) &(0x0f));
    fm_value = (fm_value<<8) ;
    fm_value = fm_value + HDMI_ReadI2C_Byte(0x09);
    fm_value = (fm_value<<8) ;
    fm_value = fm_value + HDMI_ReadI2C_Byte(0x0a);
    print("\r\nPort A lvds clock: ");
    printdec_u32(fm_value);
    lvds_clk_in = fm_value;
    #endif
	
    #ifdef INPUT_PORTB
    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x00,0x02);
    Timer0_Delay1ms(50);
    fm_value = 0;
    fm_value = (HDMI_ReadI2C_Byte(0x08) &(0x0f));
    fm_value = (fm_value<<8) ;
    fm_value = fm_value + HDMI_ReadI2C_Byte(0x09);
    fm_value = (fm_value<<8) ;
    fm_value = fm_value + HDMI_ReadI2C_Byte(0x0a);
    print("\r\nPort B lvds clock: ");
    printdec_u32(fm_value);
    lvds_clk_in = fm_value;
    #endif

#endif
}

void LT9211_LvdsRxPll(void)
{
    u8 loopx = 0;
    
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x25,0x05);
    HDMI_WriteI2C_Byte(0x27,0x02);	
	
    if(INPUT_PORT_NUM == 1)             //1Port LVDS Input
    {
        HDMI_WriteI2C_Byte(0x24,0x24); //RXPLL_LVDSCLK_MUXSEL,PIXCLK_MUXSEL	0x2c.
        HDMI_WriteI2C_Byte(0x28,0x44); //0x64
    }
    else if(INPUT_PORT_NUM == 2)        //2Port LVDS Input
    {
        HDMI_WriteI2C_Byte(0x24,0x2c); //RXPLL_LVDSCLK_MUXSEL,PIXCLK_MUXSEL	0x2c.
        HDMI_WriteI2C_Byte(0x28,0x64); //0x64
    }
    else
    {
        print("\r\n LvdsRxPll: lvds port count error");
    }
    Timer0_Delay1ms(10);
    HDMI_WriteI2C_Byte(0xff,0x87);
    HDMI_WriteI2C_Byte(0x05,0x00);
    HDMI_WriteI2C_Byte(0x05,0x80);
    Timer0_Delay1ms(100);
    for(loopx = 0; loopx < 10; loopx++) //Check Rx PLL cal
    {
        HDMI_WriteI2C_Byte(0xff,0x87);			
        if(HDMI_ReadI2C_Byte(0x12)& 0x80)
        {
            if(HDMI_ReadI2C_Byte(0x11)& 0x80)
            {
                print("\r\nLT9211 rx cal done");
            }
            else
            {
                print("\r\nLT9211 rx cal undone!!");
            }					
            print("\r\nLT9211 rx pll lock");
            break;
        }
        else
        {
            print("\r\nLT9211 rx pll unlocked");
        }
    }
}

void LT9211_VideoCheck(void)
{
    u8 sync_polarity;

    HDMI_WriteI2C_Byte(0xff,0x86);
    HDMI_WriteI2C_Byte(0x20,0x00);
	
    sync_polarity = HDMI_ReadI2C_Byte(0x70);
    vs = HDMI_ReadI2C_Byte(0x71);

    hs = HDMI_ReadI2C_Byte(0x72);
    hs = (hs<<8) + HDMI_ReadI2C_Byte(0x73);
	
    vbp = HDMI_ReadI2C_Byte(0x74);
    vfp = HDMI_ReadI2C_Byte(0x75);

    hbp = HDMI_ReadI2C_Byte(0x76);
    hbp = (hbp<<8) + HDMI_ReadI2C_Byte(0x77);

    hfp = HDMI_ReadI2C_Byte(0x78);
    hfp = (hfp<<8) + HDMI_ReadI2C_Byte(0x79);

    vtotal = HDMI_ReadI2C_Byte(0x7A);
    vtotal = (vtotal<<8) + HDMI_ReadI2C_Byte(0x7B);

    htotal = HDMI_ReadI2C_Byte(0x7C);
    htotal = (htotal<<8) + HDMI_ReadI2C_Byte(0x7D);

    vact = HDMI_ReadI2C_Byte(0x7E);
    vact = (vact<<8)+ HDMI_ReadI2C_Byte(0x7F);

    hact = HDMI_ReadI2C_Byte(0x80);
    hact = (hact<<8) + HDMI_ReadI2C_Byte(0x81);

    print("\r\nsync_polarity = %x", sync_polarity);
	if(!(sync_polarity & 0x01)) //hsync
	{
        HDMI_WriteI2C_Byte(0xff,0xd8);
        HDMI_WriteI2C_Byte(0x10, (HDMI_ReadI2C_Byte(0x10)| 0x10));
	}
	if(!(sync_polarity & 0x02)) //vsync
	{
        HDMI_WriteI2C_Byte(0xff,0xd8);
        HDMI_WriteI2C_Byte(0x10, (HDMI_ReadI2C_Byte(0x10)| 0x20));
	}

    print("\r\nhfp, hs, hbp, hact, htotal = ");
	printdec_u32(hfp);
	printdec_u32(hs);
	printdec_u32(hbp);
	printdec_u32(hact);
	printdec_u32(htotal);

	print("\r\nvfp, vs, vbp, vact, vtotal = ");
	printdec_u32(vfp);
	printdec_u32(vs);
	printdec_u32(vbp);
	printdec_u32(vact);
	printdec_u32(vtotal);
    
    if ((hact == video_1280x720_60Hz.hact ) &&( vact == video_1280x720_60Hz.vact ))
    {
        print("\r\nvideo_1280x720_60Hz"); 
        pVideo_Format = &video_1280x720_60Hz;
    }
    else if ((hact == video_1920x1080_60Hz.hact ) &&( vact == video_1920x1080_60Hz.vact ))
    {
        print("\r\nvideo_1920x1080_60Hz"); 
        pVideo_Format = &video_1920x1080_60Hz;
    }
    else 
    {
        pVideo_Format = NULL;
        print("\r\nvideo_none"); 
    }
}

void LT9211_MipiTxpll(void)
{
    u8 loopx;
	
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x36,0x03); //b7:txpll_pd
    HDMI_WriteI2C_Byte(0x37,0x28);
    HDMI_WriteI2C_Byte(0x38,0x44);
    HDMI_WriteI2C_Byte(0x3a,0x93);
	
    HDMI_WriteI2C_Byte(0xff,0x87);
    HDMI_WriteI2C_Byte(0x13,0x00);
    HDMI_WriteI2C_Byte(0x13,0x80);
    Timer0_Delay1ms(100);
    for(loopx = 0; loopx < 10; loopx++) //Check Tx PLL cal done
    {
			
        HDMI_WriteI2C_Byte(0xff,0x87);			
        if(HDMI_ReadI2C_Byte(0x1f)& 0x80)
        {
            if(HDMI_ReadI2C_Byte(0x20)& 0x80)
            {
                print("\r\nLT9211 tx pll lock");
            }
            else
            {
                print("\r\nLT9211 tx pll unlocked");
            }					
            print("\r\nLT9211 tx pll cal done");
            break;
        }
        else
        {
            print("\r\nLT9211 tx pll unlocked");
        }
    }	 			
}

void LT9211_MipiTxPhy(void)
{		
    HDMI_WriteI2C_Byte(0xff,0x82);
    HDMI_WriteI2C_Byte(0x62,0x00); //ttl output disable
    HDMI_WriteI2C_Byte(0x3b,0x32); //mipi en	
    
    HDMI_WriteI2C_Byte(0xff,0x81);
    HDMI_WriteI2C_Byte(0x20,0xfb);
    Timer0_Delay1ms(10);
    HDMI_WriteI2C_Byte(0x20,0xff);   //tx rterm calibration
    
    //HDMI_WriteI2C_Byte(0x48,0x5f); //Port A Lane P/N Swap
    //HDMI_WriteI2C_Byte(0x49,0x92); 
    //HDMI_WriteI2C_Byte(0x52,0x5f); //Port B Lane P/N Swap
    //HDMI_WriteI2C_Byte(0x53,0x92); 
	
    HDMI_WriteI2C_Byte(0xff,0x86);	
    HDMI_WriteI2C_Byte(0x40,0x80); //tx_src_sel
    /*port src sel*/
    HDMI_WriteI2C_Byte(0x41,0x01);	
    HDMI_WriteI2C_Byte(0x42,0x23);
    HDMI_WriteI2C_Byte(0x43,0x40); //Port A MIPI Lane Swap
    HDMI_WriteI2C_Byte(0x44,0x12);
    HDMI_WriteI2C_Byte(0x45,0x34); //Port B MIPI Lane Swap
}

void LT9211_MipiTxDigital(void)
{	
    HDMI_WriteI2C_Byte(0xff,0xd4);
	HDMI_WriteI2C_Byte(0x1c,0x30);  //hs_rqst_pre
	HDMI_WriteI2C_Byte(0x1d,0x0a);  //lpx
	HDMI_WriteI2C_Byte(0x1e,0x06);  //prpr
	HDMI_WriteI2C_Byte(0x1f,0x0a);  //trail
	HDMI_WriteI2C_Byte(0x21,0x00);  //[5]byte_swap,[0]burst_clk

    HDMI_WriteI2C_Byte(0xff,0xd4);	
	HDMI_WriteI2C_Byte(0x12,0x1E);
    HDMI_WriteI2C_Byte(0x15,0x01);
    HDMI_WriteI2C_Byte(0x16,0x55);	
    HDMI_WriteI2C_Byte(0x10,0x01);
    HDMI_WriteI2C_Byte(0x11,0x50); //read byteclk
    HDMI_WriteI2C_Byte(0x13,0x0f);	//bit[5:4]:lane num, bit[2]:bllp,bit[1:0]:vid_mode
    HDMI_WriteI2C_Byte(0x14,0x04); //bit[5:4]:data typ,bit[2:0]:fmt sel 000:rgb888
    HDMI_WriteI2C_Byte(0x21,0x02);
    HDMI_WriteI2C_Byte(0xff,0xd0);
    HDMI_WriteI2C_Byte(0x04,0x10);
}

void LT9211_SetTxTiming(void)
{
	u16 hact, vact;
    u16 hs, vs;
    u16 hbp, vbp;
    u16 htotal, vtotal;
    u16 hfp, vfp;	

    hact = pVideo_Format->hact;
    vact = pVideo_Format->vact;
    htotal = pVideo_Format->htotal;
    vtotal = pVideo_Format->vtotal;
    hs = pVideo_Format->hs;
    vs = pVideo_Format->vs;
    hfp = pVideo_Format->hfp;
    vfp = pVideo_Format->vfp; 
    hbp = pVideo_Format->hbp;
    vbp = pVideo_Format->vbp;

	HDMI_WriteI2C_Byte(0xff,0xd4);
	HDMI_WriteI2C_Byte(0x04,0x01); //hs[7:0] not care
	HDMI_WriteI2C_Byte(0x05,0x01); //hbp[7:0] not care
	HDMI_WriteI2C_Byte(0x06,0x01); //hfp[7:0] not care
	HDMI_WriteI2C_Byte(0x07,(u8)(hact>>8)); //hactive[15:8]
	HDMI_WriteI2C_Byte(0x08,(u8)(hact)); //hactive[7:0]
	
	HDMI_WriteI2C_Byte(0x09,(u8)(vs)+(u8)(vbp) - 1); //vfp[7:0]
	HDMI_WriteI2C_Byte(0x0a,0x00); //bit[3:0]:vbp[11:8]
	HDMI_WriteI2C_Byte(0x0b,0x01); //vbp[7:0]
	HDMI_WriteI2C_Byte(0x0c,(u8)(vact>>8)); //vcat[15:8]
	HDMI_WriteI2C_Byte(0x0d,(u8)(vact)); //vcat[7:0]
	HDMI_WriteI2C_Byte(0x0e,0x00); //vfp[11:8]
	HDMI_WriteI2C_Byte(0x0f,0x00); //vfp[7:0]
}
	
void LT9211_LVDS2MIPIDSI_Config(void)
{
    print("\r\n*************LT9211 LVDS2MIPIDSI Config*************");
    LT9211_ChipID();
    LT9211_SystemInt();
    LT9211_LvdsRxPhy();
    LT9211_LvdsRxDigital();
    LT9211_LvdsRxPll();
    LT9211_ClockCheckDebug();
    LT9211_VideoCheck();
    
    if( pVideo_Format != NULL )
    {
        /********MIPI OUTPUT CONFIG********/
        LT9211_MipiTxPhy();
        LT9211_MipiTxpll();
        LT9211_SetTxTiming();
        LT9211_MipiTxDigital();
    }
}
/******************************************************************************
  * @project: LT9211
  * @file: lt9211.h
  * @author: zll
  * @company: LONTIUM COPYRIGHT and CONFIDENTIAL
  * @date: 2019.04.10
/******************************************************************************/

#ifndef _LT9211_H
#define _LT9211_H

/******************* LVDS Input Config ********************/
#define INPUT_PORTA
#define INPUT_PORTB

#define INPUT_PORT_NUM 2

typedef enum LVDS_FORMAT_ENUM{
    VESA_FORMAT = 0,
    JEDIA_FORMAT
};
#define LVDS_FORMAT VESA_FORMAT

typedef enum LVDS_MODE_ENUM{
    DE_MODE = 0,
    SYNC_MODE
};
#define LVDS_MODE SYNC_MODE


typedef struct video_timing{
u16 hfp;
u16 hs;
u16 hbp;
u16 hact;
u16 htotal;
u16 vfp;
u16 vs;
u16 vbp;
u16 vact;
u16 vtotal;
u32 pclk_khz;
};

void LT9211_LVDS2MIPIDSI_Config(void);

#endif

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红队打靶练习:NULLBYTE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、dirsearch 2、gobuster WEB web信息收集 图片信息收集 hydra爆破 sql注入 闭合 爆库 爆表 爆列 爆字段 hashcat SSH登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan…

Unity-场景

创建场景 创建新的场景后&#xff1a; 文件 -> 生成设置 -> Build中的场景 -> 将项目中需要使用的场景拖进去 SceneTest public class SceneTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){// 两个类&#xff1a; 场景类、场…

配置zabbix平台对数据库以及主从状态的监控

引言&#xff1a;明人不说暗话&#xff0c;今天分享下配置zabbix平台对数据库以及主从状态的监控 准备好zabbix监控平台&#xff08;zabbix-server端&#xff09;例10.12.153.235 db1客户端&#xff08;zabbix-agent&#xff09;例10.12.153.73 1.安装Zabbix存储库 # rpm -Uv…

策略路由与NQA联动示例

某公司网络使用SwitchA做汇聚层交换机&#xff0c;接入层交换机LSW做用户网关&#xff0c;LSW和SwitchA之间路由可达。汇聚层交换机SwitchA通过两条链路连接到两个核心交换机上&#xff0c;一条是高速链路&#xff0c;网关为10.1.20.1/24&#xff1b;另外一条是低速链路&#x…

算法 动态分析 及Java例题讲解

动态规划 动态规划&#xff08;英语&#xff1a;Dynamic programming&#xff0c;简称 DP&#xff09;&#xff0c;是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适…

「 网络安全常用术语解读 」杀链Kill Chain详解

1. 简介 早在2009年&#xff0c;Lockheed Martin公司就提出了杀链(Kill Chain)理论&#xff0c;现在也称之为攻击者杀链(Attacker Kill Chain)。杀链其实就是攻击者进行网络攻击时所采取的步骤。杀链模型包括7个步骤&#xff1a;1侦察 -> 2武器化 -> 3交付 -> 4利用 …

【Python】PyCharm设置控制台输出的行数限制

在使用PyCharm的时候&#xff0c;如果在控制台输出的信息过多室&#xff0c;控制台仅会保留一部分的输出信息。想要改变这个限制&#xff0c;设置方法如下&#xff1a; 进入到PyCharm的安装目录下&#xff0c;我的是C:\Develop\PyCharm202303\PyCharm 2023.3进入bin找到文件id…

鸿蒙开发(六)布局概述

迄今为止&#xff0c;我还没有正式提到布局的概念。但其实我之前的demo里面&#xff0c;已经默认使用到了一种布局&#xff0c;那就是线性布局&#xff08;Row、Column&#xff09;&#xff0c;这也是DevEco创建项目默认页面里面默认采用的布局。那么本篇&#xff0c;带着大家一…

【C语言】ipoib模块 - ipoib_send_rss函数

一、ipoib_send_rss函数定义 int ipoib_send_rss(struct net_device *dev, struct sk_buff *skb,struct ib_ah *address, u32 dqpn) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct ipoib_tx_buf *tx_req;struct ipoib_send_ring *send_ring;u16 queue_index;int hlen…

Backtrader 文档学习-Indicators混合时间框架

Backtrader 文档学习-Indicators混合时间周期 1.不同时间周期 如果数据源在Cerebro引擎中具有不同的时间范围和不同的长度&#xff0c;指示器将会终止。 比如&#xff1a;data0是日线&#xff0c;data1是月线 。 pivotpoint btind.PivotPoint(self.data1) sellsignal self…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static()&#xff0c;并将原来的GetTypeName()改为调用静态方法实现&#xff1a; 直线&#xff1a; 圆&#xff1a; 十字&#xff1a; 矩形&#xff1a; 文字&#xff1a; tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加&#xff1a; 增加…

利用python进行有限元分析(一)

【利用Python进行有限元分析】 https://www.bilibili.com/video/BV1VE411s7Yy/?share_sourcecopy_web&vd_source3c57d167735998da175fa3c99f9d0e20离散了位移场&#xff0c;使用能量原理&#xff0c;用动能和应变能和虚功原理来寻找一致的质量、刚度和节点力向量。 一致是…

机器人强化学习-双机械臂

概要 基于 robosuite 库&#xff0c;进行双臂机器人学习训练 环境测试 下面展示下分别控制两个机械手随机运动的画面&#xff1a; 双臂显示场景如下&#xff1a;双臂调用代码如下&#xff1a; import numpy as np import robosuite as suite import robomimic import rob…

集成腾讯Bugly使用步骤以及字符串的上传(IOS手把手)

一、集成Bugly 1.通过CocoaPods集成&#xff0c;在工程的Podfile里面添加以下代码&#xff1a; pod Bugly 保存并在终端cd进入你的项目路径&#xff0c;执行pod install,然后用后缀为.xcworkspace的文件打开工程。 2.在工程的AppDelegate.m文件导入头文件 #import "A…

MacMaster:一款功能强大的高级网络接口管理与监控工具

关于MacMaster MacMaster是一款功能强大的高级网络接口管理与监控工具&#xff0c;该工具专为网络安全研究人员打造&#xff0c;支持对各种不同系统网络接口的MAC地址进行管理。 MacMaster本质上是一个全面的命令行工具&#xff0c;该工具在设计之初就考虑到的简单性和功能性…

树形结构下拉框组件vue-treeselect的使用(安装、模糊匹配、单选、多选、延迟加载、异步搜索等)

一、基本使用流程 首先npm安装依赖 npm install riophae/vue-treeselect --save然后在需要使用的组件中引入 import Treeselect from riophae/vue-treeselect import riophae/vue-treeselect/dist/vue-treeselect.css声明组件 components: { Treeselect }使用 <treesele…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…

【网站项目】基于ssm的青大校园预点餐系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

三层架构——工业控制领域简单理解

前言闲话 工业领域对好滴软件架构的需求不高&#xff0c;但不意味着可以用纯面向过程式编程解决问题&#xff0c;这样后期维护必将大乱。 曾经和一位从业30年的老电气工程师交流工业控制编程&#xff1a; 我问&#xff1a;为啥富士康这些大厂以前的机器都不联网&#xff1f;&…

自养买家号测评(补单)在亚马逊、lazada、速卖通等平台上需要注意什么?

在当今的电商环境中&#xff0c;许多卖家选择自己养号进行测评。然而&#xff0c;这种做法并非毫无风险。亚马逊、Lazada、eBay、Shopee、Wish、速卖通、沃尔玛、阿里国际、Mercari和Tik Tok等平台都存在封号的风险。特别是在每年的风险控制期内&#xff0c;新号被封的情况尤为…