⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c_example.c

📁 使用DM2016加密芯片对DSP进行加密
💻 C
字号:
#define OFFSET_CONTENT_DM2016 0x90
#define SIZE_CONTENT_DM2016   0x08



void iic_start()
{
	SDA_HIGH; 
	NOP;
	SCL_HIGH; 
	NOP;
	NOP; 
	SDA_LOW ; 
	NOP;
	NOP; 
	SCL_LOW ; 
	NOP ;
}


// iic_stop , send stop bit
void iic_stop()
{
	SDA_LOW; 
	NOP;
	NOP; 
	SCL_HIGH; 
	NOP; 
	NOP; 
	SDA_HIGH; 
	NOP; 
	NOP; 
	NOP; 
	NOP; 
	
}

bit iic_write_byte( u8 wdata )
{
	for ( i =0 ;i < 8 ;i ++ )
	{
		if ( wdata & 0x80 )
		{
			SDA_HIGH; 
			NOP;
		}
		else
		{
			SDA_LOW;
			NOP; 
		}
		
		wdata <<= 1 ; 
		SCL_HIGH; 
		NOP ; 
		SCL_LOW;
		NOP;
		
	}
	
	NOP ;  // check ack 
	SDA_HIGH ; 
	NOP ; 
	SCL_HIGH ; 
	NOP ; 
	
	if ( !IS_SDA_HIGH )
	{
		SCL_LOW ; 
		NOP ; 
		return 1 ; 
	}
	else
	{
		SCL_LOW ; 
		NOP ; 
		return 0 ; 
	}
	
}


// iic_read_byte re_data -- whether send ack bit
u8 iic_read_byte( bit re_data )
{
	
	u8 rdata =0; 
	SDA_HIGH ; 

	for ( i = 0 ;i < 8 ;i ++ )
	{
		rdata <<=1 ; 
		SCL_LOW ; 
		NOP ; 
		SCL_HIGH ; 
		NOP ; 
		if ( IS_SDA_HIGH )
		{
			rdata ++ ; 
		}
		
		NOP ; 
		
	}

	NOP; 
	SCL_LOW; 
	NOP;
	if ( re_data )
	{
		SDA_HIGH; 
		NOP;
	}
	else
	{
		SDA_LOW;
		NOP; 
	}
	
	NOP ;
	SCL_HIGH ; 
	NOP ; 
	SCL_LOW ; 
	NOP ; 

	return (rdata) ; 
}

bit iic_read_some_bytes( u8 reg_add, CON_PTR_TYPE rdata, u8 len)
{
	data u8 i ;

	iic_start() ; 

	if( !iic_write_byte(IIC_ADDR) )  // DM2016设备地址
	{
		iic_stop() ; 
		NOP ;
		return 0 ; 
	}
	
	if( !iic_write_byte(reg_add) )
	{
		iic_stop() ; 
		return 0 ; 
	}
	
	iic_stop() ; 
	
	iic_start() ; 
	
	if(!iic_write_byte(IIC_ADDR | 1))
	{
		iic_stop() ; 
		return 0 ; 
	}
	
	
	for( i = 0 ; i< len -1 ;i++) 
	{
		((u8*)rdata) [i] = iic_read_byte(0); 
		NOP;
	}
	
	((u8*)rdata)[i] = iic_read_byte(1) ;  // last byte
	
	iic_stop() ; 
	return 1 ; 
}


bit iic_write_some_bytes( u8 reg_add, CON_PTR_TYPE wdata, u8 len)
{
	data u8 i ; 
	
	iic_start() ; 
	if( !iic_write_byte(IIC_ADDR) )  // DM2016设备地址
	{
		iic_stop() ; 
		NOP  ; 
		return 0 ; 
	}
	
	if ( !iic_write_byte(reg_add) ) // 
	{
		iic_stop() ; 
		NOP ;
		return 0 ; 
	}
	
	
	for ( i = 0 ; i < len ; i ++ )
	{
		if (!iic_write_byte(((u8*)wdata)[i]))
		{
			iic_stop(); 
			NOP ; 
			return 0 ; 
		}
		
	}
	
	iic_stop() ; 
	NOP ; 

	return 1 ; 
}


bit  write_2016_data( CON_PTR_TYPE data_ptr, u8 addr, u8 len ) 
{
	bit r; 

	change_iic_bus();
	r = iic_write_some_bytes(addr, data_ptr, len) ; 
	m_sleep(50); 

	return r ; 
}

bit read_2016_data( CON_PTR_TYPE data_ptr, u8 addr, u8 len  ) 
{
	bit r; 
	u8 i = 0  ; 
	
	change_iic_bus();
	
	r = iic_read_some_bytes(addr, data_ptr, len) ;
	m_sleep(50) ; 

	return r ; 
}


void do_verify_dm2016_key(...) 
{
	
	//bit ok;     
	ok = TRUE;   //TRUE's value is '1'

	// write text
	memset(data_buf,0,8);
	do 
	{
		...
			//OFFSET_CONTENT_DM2016's value is 0x90-0x97
			if ( 0 == write_2016_data( (CON_PTR_TYPE)data_buf, OFFSET_CONTENT_DM2016, 8 ) )
			{
				ok = FALSE ; 
				break; 
			}
			m_sleep(1);
			if ( 0 == read_2016_data( (CON_PTR_TYPE)data_buf, OFFSET_CONTENT_DM2016, 8 ) )
			{
				ok = FALSE ; 
				break; 
			}
			m_sleep(5) ; 
			
			if ( memcmp( TEXT_VERIFY_2016, data_buf, 8 ) )
			{
				ok = FALSE ; 
				break; 
			}
			
	} while(0);
	
	if (!ok)
	{
		....
	}
	
	....
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -