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)
- 二次开发步骤(P4)
在线预览
若预览无法显示,请直接下载 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找不到设备
原因:
- 先打开设备管理器,确认是不是有rockusb设备2. 存在rockusb设备,那么检查库初始化时是不是有指定bScan4FsUsb为TRUE 3. 存在未知设备,查看此设备硬件ID,我们的rockusb设备vid是0x2207,pid是0x3xxx,0x2xxx,0x1xxx 4. 如果属于上面范围,使用DriverAssistant工具安装驱动5. 未知设备(获取描述符失败),请更新产品最新loader