主頁 >  其他 > 新年第一天,用邏輯分析儀探究一波I2C波形

新年第一天,用邏輯分析儀探究一波I2C波形

2022-01-02 07:11:17 其他

個人筆記

文章目錄

  • 1. 我寫的 C51 I2C 時序
  • 2. 普中51提供的 I2C 時序
  • 3. 正點原子 STM32 的 I2C 時序
  • 4. ARM Linux 內核 I2C 時序
  • 5. 涉及到的 I2C 代碼(軟體模擬 I2C)
    • 我的
    • 普中科技的
    • 正點原子的

前幾天寫了一篇關于 I2C 的文章,發現 I2C 其實還挺簡單的,(前提是不考慮多主機,10位尋址我也沒去研究)

那篇文章的 I2C 代碼是我按照 AT24C02 芯片手冊里的時序圖撰寫的(同時還參考了許多代碼模板),雖然功能實作了,但總覺得自己寫的代碼可能不夠規范,

所以今天我想使用邏輯分析儀(淘寶買的雜牌便宜貨😁),對 I2C 波形一探究竟,我將拿我的代碼和普中51單片機教程給出的 I2C 范例程式及正點原子STM32教程提供的 I2C 范例程式做一個簡單的對比,(對比時序波形),

【本人水平有限,本文的內容僅供參考,不能保證100%靠譜,】

1. 我寫的 C51 I2C 時序

這里只分析時序圖,對應 I2C 代碼見文章最后一章

總覽

主機先向從機寫入資料0x00,然后讀取從機回傳的資料0x08,從機地址(設備地址+讀寫位)為0xA0,

起始信號

起始信號:時鐘SCL高電平時,資料SDA由高變低,由于51單片機時鐘頻率低,空陳述句延時達到了30us,不過 I2C 周期長短只會影響它的傳輸速率,并不會導致傳輸失敗,

時鐘低電平修改SDA

在時鐘SCL低電平期間,改變SDA狀態,下圖中,SDA電平變化至時鐘上升沿的時間間距為3.25us,這是由于我代碼中發送資料(改變SDA)和拉高時鐘電平寫在一起,中間沒有任何延時代碼,(總感覺這中間應該加一個延時代碼,其他人的代碼這里都加了延時)

傳輸8位地址資料

主設備向從設備發送了1個位元組的資料,這里的資料是地址資料,時鐘SCL高電平時對應的資料SDA即為每位傳輸的資料,SDA高電平表示1,SDA為低表示0,一共8個周期,傳輸8位二機制資料,

等待從機應答
在第9個周期前,需要將SDA拉高(下圖SDA并沒有出現高電平,說明在我們手動拉高瞬間,從機就把SDA拉低了,?),如果在第9個周期的高電平期間,從機已經將SDA拉低,說明從機發出了應答信號ACK,雙方繼續通信,

發送1個位元組的資料

和上面的發送地址資料相同,這里繼續發送一個位元組的資料,可以看到SDA一直是低,說明傳輸的資料是0x00,

重新起始信號

由于接下來需要切換成讀操作,所以主機需要再發送一個起始信號(又稱重新起始信號),

發送設備地址(讀)

和之前的第一個發送地址資料(設備地址+讀寫位)的時序相同,唯一的區別是上次發的是寫地址,這次發送的位讀地址,為0xA1(最后1位為1,表示主機讀資料),

讀取1個位元組的資料

和寫操作時序類似,只是傳輸方向由主機->從機變成主機<-從機

從機發送非應答信號+主機發送停止信號

資料讀取完成后,從機發出非應答信號(不把SDA拉低),第9個周期過后,主機發送停止信號,結束本次通信,
停止信號:SCL為高電平時,資料SDA由低變高,

2. 普中51提供的 I2C 時序

這里只分析時序圖,對應 I2C 代碼見文章最后一章

總覽

和上文一樣的操作,寫三個位元組(2個地址資料+1個普通資料),讀取一個位元組,

這份時序中,在修改SDA電平的前后都加了延時,也就是低電平的持續時間是我的兩倍,也是高電平時間的兩倍,

應答信號的處理方式也和我不同,這份時序的第9個周期的高電平時間不是固定的,而是只要檢測到SDA被從機拉低,就算應答信號完成,所以周期信號重要的不是維持時間(但也有最小時間限制),而是上升沿信號,

其他地方和我的時序沒太大區別,

3. 正點原子 STM32 的 I2C 時序

這里只分析時序圖,對應 I2C 代碼見文章最后一章

由于我沒接 I2C 從機,所以沒有應答信號,這份時序和普中51的很類似,比如低電平時長為高低平的兩倍(在中間更改SDA電平),第9個周期采用回圈讀取應答信號,如果檢測到應答信號,就將時鐘拉低,否則一直檢測,直到超時(回圈內有計數值限制回圈時間),

另外,由于這款32位芯片的時鐘頻率較高,所以一個周期時長只有9.542us,而普中51的時序中周期時長為57.5us,

4. ARM Linux 內核 I2C 時序

內核的 I2C 原始碼我不太了解,平時只用過內核自帶的 I2C 介面函式

總覽

LInux 內核的 I2C 時序有個特點,起始信號、結束信號和中間資料傳輸直接隔得很開,讀和寫也分開了,但時序規則沒變,

發送地址資料

一個周期的時長為4.99us,高電平2us,低電平3us,9個周期長度相同,

讀取資料

5. 涉及到的 I2C 代碼(軟體模擬 I2C)

下面僅給出 I2C 的功能代碼和簡單的外設讀寫代碼(組成完整 I2C 時序),不涉及主函式和其他無關功能代碼

我的

代碼僅用來參考 I2C 具體實作程序,不能直接運行

/******************************************************************************
 * @ 函式名  : Delay_10us
 * @ 功  能  : 10us粗略延時
 * @ 參  數  : 延時時間--單位10us
 * @ 回傳值  : 無
 ******************************************************************************/
void Delay_10us(unsigned int time)
{
	while(time--);
}

/******************************************************************************
 * @ 函式名  : I2c_Delay
 * @ 功  能  : I2C延時函式
 * @ 參  數  : 無
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_Delay()
{
	Delay_10us(1);
}

/******************************************************************************
 * @ 函式名  : I2c_Start
 * @ 功  能  : I2C起始信號
 * @ 參  數  : 無
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_Start()
{
	sda = 1;
	scl = 1;
	I2c_Delay(); //起始信號建立時間
	sda = 0;     //SDA拉低,下降沿
	I2c_Delay(); //起始信號保持時間
	scl = 0;
}

/******************************************************************************
 * @ 函式名  : I2c_Stop
 * @ 功  能  : I2C停止信號
 * @ 參  數  : 無
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_Stop()
{
	scl = 0;
	I2c_Delay(); //上一個時鐘周期的低電平
	sda = 0;
	scl = 1;
	I2c_Delay(); //停止信號建立時間
	sda = 1;     //SDA拉高,上升沿
	I2c_Delay(); //總線空閑時間保持
}


/******************************************************************************
 * @ 函式名  : I2c_Ack
 * @ 功  能  : I2C應答信號
 * @ 參  數  : 無
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_Ack()
{
	scl = 0;
	sda = 0;     //SDA拉低,發出應答信號
	I2c_Delay();
	scl = 1;
	I2c_Delay(); 
	scl = 0;
}


/******************************************************************************
 * @ 函式名  : I2c_No_Ack
 * @ 功  能  : I2C非應答信號
 * @ 參  數  : 無
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_No_Ack()
{
	scl = 0;
	sda = 1;     //SDA拉高,發出非應答信號
	I2c_Delay();
	scl = 1;
	I2c_Delay(); 
	scl = 0;
}

/******************************************************************************
 * @ 函式名  : I2c_Wait_Ack
 * @ 功  能  : I2C等待應答信號
 * @ 參  數  : 無
 * @ 回傳值  : 1:接收到應答信號,0:接收到非應答信號
 ******************************************************************************/
unsigned char I2c_Wait_Ack()
{
	unsigned char ack = 0;
	sda = 1;
	scl = 0;	    
	I2c_Delay();
	scl = 1;
	I2c_Delay(); 
	if(sda == 0) //檢測資料線SDA是否被拉低
		ack = 1;
	else 
		ack = 0;
	scl = 0;
	return ack;
}

/******************************************************************************
 * @ 函式名  : I2c_Write_Byte
 * @ 功  能  : I2C寫位元組
 * @ 參  數  : dat 要寫入的位元組資料
 * @ 回傳值  : 無
 ******************************************************************************/
void I2c_Write_Byte(unsigned char dat)
{
	unsigned char i = 0;
	
	
	for(i = 0; i < 8; i++) //讀取8位
	{
		scl = 0;	
		I2c_Delay();
		if(dat & 0x80)  //發送最高位
			sda = 1;
		else 
			sda = 0;
		scl = 1; 
		I2c_Delay();		
		dat <<= 1;  //左移1位
	}
	scl = 0;
}


/******************************************************************************
 * @ 函式名  : I2c_Read_Byte
 * @ 功  能  : I2C讀位元組
 * @ 參  數  : 無
 * @ 回傳值  : 讀取的位元組資料
 ******************************************************************************/
unsigned char I2c_Read_Byte()
{
	unsigned char dat = 0, i = 0;
    
	for(i = 0; i < 8; i++) //讀取8位
	{
		dat <<= 1;   //左移1位
		scl = 0;	
		I2c_Delay();
		scl = 1;     //SCL高電平
		I2c_Delay();
		if(sda)      //讀取SDA狀態
			dat |= 0x1;
	}
	scl = 0;
	return dat;
}

/******************************************************************************
 * @ 函式名  : At24c02_Write
 * @ 功  能  : AT24C02寫位元組
 * @ 參  數  : 
 *              addr 要寫資料的地址(存盤空間)
 *              dat  要寫入的位元組資料
 * @ 回傳值  : 無
 ******************************************************************************/
void At24c02_Write(unsigned char addr, unsigned char dat)
{
	I2c_Start();
	I2c_Write_Byte(0xA0); //發送I2C設備地址
	I2c_Wait_Ack();       //等待從機回應
	I2c_Write_Byte(addr); //發送要寫入的記憶體地址
	I2c_Wait_Ack();
	I2c_Write_Byte(dat);  //寫入資料
	I2c_Wait_Ack();
	I2c_Stop();
	Delay_10us(1000);     //寫周期
}


/******************************************************************************
 * @ 函式名  : At24c02_Read
 * @ 功  能  : AT24C02讀位元組
 * @ 參  數  : addr 要讀資料的地址(存盤空間)
 * @ 回傳值  : 讀取的位元組資料
 ******************************************************************************/
unsigned char At24c02_Read(unsigned char addr)
{
	unsigned char dat = 0, i = 0;
	I2c_Start();
	I2c_Write_Byte(0xA0); //發送I2C設備地址
	I2c_Wait_Ack();       //等待從機回應
	I2c_Write_Byte(addr); //發送要寫入的記憶體地址
	I2c_Wait_Ack(); 
	I2c_Start();
	I2c_Write_Byte(0xA1); //發送I2C設備地址(讀資料)
	I2c_Wait_Ack();       //等待從機回應
	dat = I2c_Read_Byte(); //讀取資料
	I2c_Wait_Ack(); 
	I2c_Stop();
	return dat;
}

————————————————
著作權宣告:本文為CSDN博主「小輝_Super」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告,
原文鏈接:https://blog.csdn.net/weixin_43772810/article/details/122149151

普中科技的

代碼僅用來參考 I2C 具體實作程序,不能直接運行

#include"i2c.h"

/*******************************************************************************
* 函式名         : Delay10us()
* 函式功能		   : 延時10us
* 輸入           : 無
* 輸出         	 : 無
*******************************************************************************/

void Delay10us()
{
	unsigned char a,b;
	for(b=1;b>0;b--)
		for(a=2;a>0;a--);

}
/*******************************************************************************
* 函式名         : I2cStart()
* 函式功能		 : 起始信號:在SCL時鐘信號在高電平期間SDA信號產生一個下降沿
* 輸入           : 無
* 輸出         	 : 無
* 備注           : 起始之后SDA和SCL都為0
*******************************************************************************/

void I2cStart()
{
	SDA=1;
	Delay10us();
	SCL=1;
	Delay10us();//建立時間是SDA保持時間>4.7us
	SDA=0;
	Delay10us();//保持時間是>4us
	SCL=0;			
	Delay10us();		
}
/*******************************************************************************
* 函式名         : I2cStop()
* 函式功能		 : 終止信號:在SCL時鐘信號高電平期間SDA信號產生一個上升沿
* 輸入           : 無
* 輸出         	 : 無
* 備注           : 結束之后保持SDA和SCL都為1;表示總線空閑
*******************************************************************************/

void I2cStop()
{
	SDA=0;
	Delay10us();
	SCL=1;
	Delay10us();//建立時間大于4.7us
	SDA=1;
	Delay10us();		
}
/*******************************************************************************
* 函式名         : I2cSendByte(unsigned char dat)
* 函式功能		 : 通過I2C發送一個位元組,在SCL時鐘信號高電平期間,保持發送信號SDA保持穩定
* 輸入           : num
* 輸出         	 : 0或1,發送成功回傳1,發送失敗回傳0
* 備注           : 發送完一個位元組SCL=0,SDA=1
*******************************************************************************/

unsigned char I2cSendByte(unsigned char dat)
{
	unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us,		
	for(a=0;a<8;a++)//要發送8位,從最高位開始
	{
		SDA=dat>>7;	 //起始信號之后SCL=0,所以可以直接改變SDA信號
		dat=dat<<1;
		Delay10us();
		SCL=1;
		Delay10us();//建立時間>4.7us
		SCL=0;
		Delay10us();//時間大于4us		
	}
	SDA=1;
	Delay10us();
	SCL=1;
	while(SDA)//等待應答,也就是等待從設備把SDA拉低
	{
		b++;
		if(b>200)	 //如果超過2000us沒有應答發送失敗,或者為非應答,表示接收結束
		{
			SCL=0;
			Delay10us();
			return 0;
		}
	}
	SCL=0;
	Delay10us();
 	return 1;		
}
/*******************************************************************************
* 函式名         : I2cReadByte()
* 函式功能		   : 使用I2c讀取一個位元組
* 輸入           : 無
* 輸出         	 : dat
* 備注           : 接收完一個位元組SCL=0,SDA=1.
*******************************************************************************/

unsigned char I2cReadByte()
{
	unsigned char a=0,dat=0;
	SDA=1;			//起始和發送一個位元組之后SCL都是0
	Delay10us();
	for(a=0;a<8;a++)//接收8個位元組
	{
		SCL=1;
		Delay10us();
		dat<<=1;
		dat|=SDA;
		Delay10us();
		SCL=0;
		Delay10us();
	}
	return dat;		
}


/*******************************************************************************
* 函式名         : void At24c02Write(unsigned char addr,unsigned char dat)
* 函式功能		   : 往24c02的一個地址寫入一個資料
* 輸入           : 無
* 輸出         	 : 無
*******************************************************************************/

void At24c02Write(unsigned char addr,unsigned char dat)
{
	I2cStart();
	I2cSendByte(0xa0);//發送寫器件地址
	I2cSendByte(addr);//發送要寫入記憶體地址
	I2cSendByte(dat);	//發送資料
	I2cStop();
}
/*******************************************************************************
* 函式名         : unsigned char At24c02Read(unsigned char addr)
* 函式功能		   : 讀取24c02的一個地址的一個資料
* 輸入           : 無
* 輸出         	 : 無
*******************************************************************************/

unsigned char At24c02Read(unsigned char addr)
{
	unsigned char num;
	I2cStart();
	I2cSendByte(0xa0); //發送寫器件地址
	I2cSendByte(addr); //發送要讀取的地址
	I2cStart();
	I2cSendByte(0xa1); //發送讀器件地址
	num=I2cReadByte(); //讀取資料
	I2cStop();
	return num;	
}

正點原子的

代碼僅用來參考 I2C 具體實作程序,不能直接運行

//	 
//本程式只供學習使用,未經作者許可,不得用于其它任何用途
//ALIENTEK戰艦STM32開發板
//IIC驅動 代碼	   
//正點原子@ALIENTEK
//技術論壇:www.openedv.com
//修改日期:2012/9/9
//版本:V1.0
//著作權所有,盜版必究,
//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019
//All rights reserved									  
//
 
//初始化IIC
void IIC_Init(void)
{					     
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOA, ENABLE );	//使能GPIOB時鐘
	   
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽輸出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_6|GPIO_Pin_7); 	//PB6,PB7 輸出高
}
//產生IIC起始信號
void IIC_Start(void)
{
	SDA_OUT();     //sda線輸出
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
	delay_us(4);
	IIC_SCL=0;//鉗住I2C總線,準備發送或接收資料 
}	  
//產生IIC停止信號
void IIC_Stop(void)
{
	SDA_OUT();//sda線輸出
	IIC_SCL=0;
	IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL=1; 
	IIC_SDA=1;//發送I2C總線結束信號
	delay_us(4);							   	
}
//等待應答信號到來
//回傳值:1,接收應答失敗
//        0,接收應答成功
u8 IIC_Wait_Ack(void)
{
	u8 ucErrTime=0;
	SDA_IN();      //SDA設定為輸入  
	IIC_SDA=1;delay_us(1);	   
	IIC_SCL=1;delay_us(1);	 
	while(READ_SDA)
	{
		ucErrTime++;
		if(ucErrTime>250)
		{
			IIC_Stop();
			return 1;
		}
	}
	IIC_SCL=0;//時鐘輸出0 	   
	return 0;  
} 
//產生ACK應答
void IIC_Ack(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=0;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}
//不產生ACK應答		    
void IIC_NAck(void)
{
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=1;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}					 				     
//IIC發送一個位元組
//回傳從機有無應答
//1,有應答
//0,無應答			  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
	SDA_OUT(); 	    
    IIC_SCL=0;//拉低時鐘開始資料傳輸
    for(t=0;t<8;t++)
    {              
        //IIC_SDA=(txd&0x80)>>7;
		if((txd&0x80)>>7)
			IIC_SDA=1;
		else
			IIC_SDA=0;
		txd<<=1; 	  
		delay_us(2);   //對TEA5767這三個延時都是必須的
		IIC_SCL=1;
		delay_us(2); 
		IIC_SCL=0;	
		delay_us(2);
    }	 
} 	    
//讀1個位元組,ack=1時,發送ACK,ack=0,發送nACK   
u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char i,receive=0;
	SDA_IN();//SDA設定為輸入
    for(i=0;i<8;i++ )
	{
        IIC_SCL=0; 
        delay_us(2);
		IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
		delay_us(1); 
    }					 
    if (!ack)
        IIC_NAck();//發送nACK
    else
        IIC_Ack(); //發送ACK   
    return receive;
}

//在AT24CXX指定地址讀出一個資料
//ReadAddr:開始讀數的地址  
//回傳值  :讀到的資料
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{				  
	u8 temp=0;		  	    																 
    IIC_Start();  
	if(EE_TYPE>AT24C16)
	{
		IIC_Send_Byte(0XA0);	   //發送寫命令
		IIC_Wait_Ack();
		IIC_Send_Byte(ReadAddr>>8);//發送高地址
		IIC_Wait_Ack();		 
	}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //發送器件地址0XA0,寫資料 	 

	IIC_Wait_Ack(); 
    IIC_Send_Byte(ReadAddr%256);   //發送低地址
	IIC_Wait_Ack();	    
	IIC_Start();  	 	   
	IIC_Send_Byte(0XA1);           //進入接收模式			   
	IIC_Wait_Ack();	 
    temp=IIC_Read_Byte(0);		   
    IIC_Stop();//產生一個停止條件	    
	return temp;
}
//在AT24CXX指定地址寫入一個資料
//WriteAddr  :寫入資料的目的地址    
//DataToWrite:要寫入的資料
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{				   	  	    																 
    IIC_Start();  
	if(EE_TYPE>AT24C16)
	{
		IIC_Send_Byte(0XA0);	    //發送寫命令
		IIC_Wait_Ack();
		IIC_Send_Byte(WriteAddr>>8);//發送高地址
 	}else
	{
		IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //發送器件地址0XA0,寫資料 
	}	 
	IIC_Wait_Ack();	   
    IIC_Send_Byte(WriteAddr%256);   //發送低地址
	IIC_Wait_Ack(); 	 										  		   
	IIC_Send_Byte(DataToWrite);     //發送位元組							   
	IIC_Wait_Ack();  		    	   
    IIC_Stop();//產生一個停止條件 
	delay_ms(10);	 
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400358.html

標籤:其他

上一篇:通過STM32單片機計算并控制小車速度,通過控制速度的思想擴展到控制其它變化量

下一篇:關于HDMI之TMDS的硬體總結

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more