跳到主要内容

RKupgrade二次开发库用户手册

:::info 文档信息

发布版本:1.0 · 发布日期:2017-11-06 · 页数:8 · 语言:中文

原始文档:RKUpgrade_Dll_UserManual.pdf

:::

章节大纲​

  • RKupgrade二次开发库用户手册(P1)
    • 二次开发步骤(P4)
      • 导入库和头文件(P4)
      • 初始化RKUpgrade库(P4)
      • 扫描设备(P4)
      • 操作设备(以写序列号为例)(P4)
      • 反初始化RKUpgrade.dll库(P4)
    • 操作接口(P4)
      • 读写自定义数据(P5)
      • 读写序列号(P5)
      • 读写网卡地址(P5)
      • 读写WifiMac地址(P5)
      • 读写蓝牙地址(P5)
      • 清空Sector3数据(P6)
      • 读写Vendor数据(P6)
    • 读写Provision数据(P6)
      • 读写KeyHash数据(P6)
      • 读写Efuse数据(P6)
      • 重启rockusb设备(P7)
    • 常见问题(P7)
      • 日志文件提示'ERROR:CheckUsbDevice->Usb type mismatch'(P7)
      • 日志文件提示'ERROR:WriteSN-->SN Size is Wrong'(P7)
      • 日志文件提示'ERROR:WriteSN-->CheckIDBData failed'(P7)
      • 日志文件提示'ERROR:TestDevice-->RKU_TestDeviceReady failed,Total is zero'(P7)
      • 日志文件提示' ERROR:PrepareIDB-->No Found 1st Flash CS'(P7)
      • RK_ScanDevice找不到设备(P8)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


1. 二次开发步骤​

1.1 导入库和头文件​

采用Vs2008开发环境,请按以下步骤:步骤1:包含头文件(#include "RKUpgradeDll.h")步骤2:导入库文件(#pragma comment(lib,"RKUpgrade.lib"))采用其他windows开发平台,请按以下步骤:步骤1:参考RKUpgradeDll.h文件,声明使用到的数据类型和函数步骤2:调用系统的LoadLibrary函数,加载RKUpgrade.dll步骤3.调用系统的GetProcAddress函数,引入使用到的函数指针

1.2 初始化RKUpgrade库​

步骤1:初始化INIT_DEV_INFO变量为全零, bScan4FsUsb成员和uiRockusbTimeout成员根据实际情况设置步骤2: 初始化InitLogInfo变量,设置是否要记录日志和日志保存位置步骤3: 初始化InitCallbackInfo变量为全零步骤4: 调用RK_Initialize初始化函数注:在程序初始化时调用

1.3 扫描设备​

步骤1:调用RK_ScanDevice函数,扫描设备步骤2: 判断nDeviceCounts参数,0没有发现设备,1发现1台设备,>1发现多台设备默认只操作最前面的那台步骤3: 判断bExistMsc参数和bExistAdb,如果bExistMsc为真,开始读写操作前需要先调用RK_SwitchToRockusb函数切换到rockusb,如果bExistAdb为真,需要先调用外部工具adb.exe执行adb reboot loader

1.4 操作设备(以写序列号为例)​

步骤1:调用RK_WriteSN函数

1.5 反初始化RKUpgrade.dll库​

步骤1:所有调用RK_Uninitialize函数

2. 操作接口​

2.1 读写自定义数据​

说明:自定义数据保存在IDBLOCK的扇区3中,有512个字节空间函数:RK_WriteCustomData 和RK_ReadCustomData

pCustomData :分配512字节buffer nCustomDataOffset :自定义数据在512空间中的偏移nCustomDataLen :自定义数据的长度,字节单位注:读取成功后,返回的是整个sector3数据,要通过nCustomDataOffset偏移到自定义数据.写入的数据是从pCustomData + nCustomDataOffset开始的nCustomDataLen数据

2.2 读写序列号​

说明:序列号在sector3中2-61位置,0-1是序列号长度函数:RK_WriteSN和RK_ReadSN

pSN :序列号,字符串数据nSNLen :序列号长度,字节单位

2.3 读写网卡地址​

说明:网卡地址在sector3中506-511位置,每4位代表一个字符,一共表示12个字符网卡地址,函数:RK_WriteMAC和RK_ReadMAC

pMac :6个字节转换后的地址nMacLen :长度为6

2.4 读写WifiMac地址​

说明:WifiMac地址在sector3中445-450位置,每4位代表一个字符,一共表示12个字符网卡地址,函数:RK_WriteWifi和RK_ReadWifi

pWifi :6个字节转换后的地址nWifiLen :长度为6

2.5 读写蓝牙地址​

说明:蓝牙地址在sector3中499-504位置,每4位代表一个字符,一共表示12个字符网卡地址,函数:RK_WriteBT和RK_ReadBT

pBT :6个字节转换后的地址nBTLen :长度为6

2.6 清空Sector3数据​

说明:sector3中全部512字节清零函数:RK_ClearAllInfo

2.7 读写Vendor数据​

说明:有两个Vendor区,分别是vendor0和vendor1,每个区504个字节,这个区域的性质是升级后数据不会丢失,设备端可读可写。函数:RK_WriteVendorInfo和RK_ReadVendorInfo

pVendorBuffer :504为单位的buffer sectorOffset :指定vendor号,只有0或者1 sectorCount : 指定读写访问的vendor数

3. 读写Provision数据​

说明:Provision区,大概1-1.5M大小的空间,按ID来访问每个读写项,每个项数据不能超过62K.目前只有新的芯片方案有这个接口,请与系统工程师确认后使用。函数: RK_WriteProvisioningData和RK_ReadProvisioningData

pDataBuffer :数据项的访问buffer nBufferSize :数据项buffer大小,字节单位nID :数据项ID

3.1 读写KeyHash数据​

说明:芯片内部有一块efuse存储空间,里面有块区域保存的是公钥的hash.这部分空间只能写一次.写入公钥hash后,芯片激活安全机制。函数:RK_WriteKeyHashToEfuse和RK_ReadKeyHashFromEfuse

pKeyHash :32字节内存空间usKeyHashSize :读取到的keyhash长度注:调用RK_WriteKeyHashToEfuse前,要先调用RK_SetFirmware设置签名后的update.img固件

3.2 读写Efuse数据​

说明:芯片内部有一块efuse存储空间,去掉被占用的空间外还有一些空间是开放给客户使用.这部分空间只能写一次.具体每个芯片开放的空间大小都不同,请与系统工程师确认后使用。函数: RK_WriteDataToEfuse和RK_ReadDataFromEfuse

pBuffer :内存空间,每个bit占用一个字节,最多读写512比特usPos :读写的起始比特usWriteSize :写入的比特数usReadSize :读取的比特数

3.3 重启rockusb设备​

说明:重启rockusb设备函数: RK_ResetRockusb

Subcode :0为正常重启,3为重启进入maskrom

4. 常见问题​

4.1 日志文件提示'ERROR:CheckUsbDevice->Usb type mismatch'​

原因:上面除efuse相关的操作外,都需要在loader状态下进行。注:maskrom和loader都属于rockusb,maskrom下的操作有限.当通过RK_ScanDevice扫描到Rockusb设备后,可以通过调用RK_GetDeviceInfo函数中pUsbtypeArray参数来判断,值为1是maskrom,值为2是loader

4.2 日志文件提示'ERROR:WriteSN-->SN Size is Wrong'​

原因:SN超过60个字节

4.3 日志文件提示'ERROR:WriteSN-->CheckIDBData failed'​

原因:IDBLock数据被破坏,校验失败,需要重新升级固件后才能再写

4.4 日志文件提示'ERROR:TestDevice-->RKU_TestDeviceReady​

failed,Total is zero'​

原因:设备安全机制被Enable,无法读写sector3.需要将签名后的固件发给我司系统工程师,生成授权证书,再在所有读写操作前调用RK_OpenChannel函数

4.5 日志文件提示' ERROR:PrepareIDB-->No Found 1st Flash CS'​

原因:loader上报没有找到flash,请跟系统工程师确认flash型号是否在支持列表中,硬件检查flash有没有存在虚焊

4.6 RK_ScanDevice找不到设备​

原因:

  1. 先打开设备管理器,确认是不是有rockusb设备2. 存在rockusb设备,那么检查库初始化时是不是有指定bScan4FsUsb为TRUE 3. 存在未知设备,查看此设备硬件ID,我们的rockusb设备vid是0x2207,pid是0x3xxx,0x2xxx,0x1xxx 4. 如果属于上面范围,使用DriverAssistant工具安装驱动5. 未知设备(获取描述符失败),请更新产品最新loader