前言
按照HDCP规范的要求,不能将带HDCP的数字内容私自解key,变为不受HDCP保护的内容,在调试sii9136时遇到这问题,记下添加HDCP的步骤。
添加HDCP步骤
①判断HDCP是否可用,芯片端可用0X30,sink可用0X29[1]
②读Aksv(0X36)、Bksv(0X2B)验证20个1和20个0,aoc品牌电视无法单独读取Aksv和Bksv的值
③请求链路安全(0X2A)
④验证本地链路、中继链路、启用完整性检测
⑤等待link secure(链路安全)状态0X29
⑥发送安全的内容
⑦定期验证link secure状态0X29
细节
A.轮询0X29[1]直到指示HDCP可用,Bksv值仅在0X29[1]=1有效
B.使用所需设置写入0X2A[0]
C.轮询0X2A[0]直到它与刚刚设置的匹配
D.轮询0X29[7:6]直到指示所需的安全级别,由于去抖,0X29补一定及时刷新可读中断0X30 bit2 bit0
//--------------------------------------------------------------
// add hdcp funtion
//
//
//
//
//
// @make: faceyang 20190902
//--------------------------------------------------------------
#ifdef DEV_SUPPORT_HDCP
///
///
///*************************///
/// HDCP ///
///*************************///
///
///
//------------------------------------------------------------------------------
// Function Name: IsHDCP_Supported()
// Function Description: Check Tx revision number to find if this Tx supports HDCP
// by reading the HDCP revision number from TPI register 0x30.
//
// Accepts: none
// Returns: TRUE if Tx supports HDCP. FALSE if not.
// Globals: none
//------------------------------------------------------------------------------
BYTE IsHDCP_Supported (void)
{
BYTE HDCP_Rev;
BYTE HDCP_Supported;
TPI_TRACE_PRINT((">>IsHDCP_Supported()\n"));
HDCP_Supported = TRUE;
// Check Device ID
HDCP_Rev = ReadByteTPI(TPI_HDCP_REVISION_DATA_REG);
if (HDCP_Rev != (HDCP_MAJOR_REVISION_VALUE | HDCP_MINOR_REVISION_VALUE))
{
HDCP_Supported = FALSE;
}
// Even if HDCP is supported check for incorrect Device ID // for SiI_9136AYBT_DEVICEID_CHECK
HDCP_Rev = ReadByteTPI(TPI_AKSV_1_REG);
if (HDCP_Rev == 0x09)
{
HDCP_Rev = ReadByteTPI(TPI_AKSV_2_REG);
if (HDCP_Rev =