微软公司宣布不再支持你正在使用的 IE浏览器,这会严重影响浏览网页,请使用微软最新的Edge浏览器
您好, 登录| 注册|

STM32的学习总结~~

  • 2013-07-19 19:21
  • dulai1985

    LV.0
  • 9708

    浏览

  • 29

    回复

  • 0

    获赞

  • 先占个位置,后续边学习边更新~~

    把自己所学的,所理解的东西发出来~~

    同是电子工程师,请一定不要吝啬你的赞!

    0人已赞

    编辑 举报

    LV.1

    4014599

    1447074

    50

    421479

    说说你的看法

  • LV.

    @

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    取消
    发送
  • 现在还没有回复呢,说说你的想法

    现在还没有回复呢,说说你的想法

    全部回复(29)

  • 阿信博客

    LV.1

    2013-09-02 17:59

    @123sky

    可有spwm的模块程序?
    这个我没有啊!
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4047060

    1447074

    50

    584322

    取消
    发送
    22
  • dulai1985

    LV.1

    2013-09-28 10:29

    @阿信博客

    这个我没有啊!

    Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所  成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一  HEX 记录    记录 对应 机器    / 或常量  据的十六   编码数   成。Intel HEX 文件通常用于 传输将 被存于ROM 或者EPROM 中的程序和  据。大多 EPROM  程器或模 拟器使用Intel HEX 文件。
    记录 格式
    Intel HEX
     由任意数量的十六   记录组 成。每 个记录 包含5  域, 它们按以下格式排列:
    :llaaaatt[dd...]cc
    每一组字母 对应   不同的域,每一  字母 对应   十六   编码   字。每一  域由至少 两个 十六   编码数   成, 它们构 成一   ,就像以下描述的那 样:


    每个Intel HEX 记录 都由冒 号开头 .
    ll     度域,  代表 记录当   据字  (dd)  数量 .
    aaaa 
    是地址域, 它代表 记录当  数据的起始地址 . 
    tt 
    是代表HEX 记录类 型的域 ,  可能是以下    中的一 个:
        00 –   记录
        01 – 文件  记录
        02 – 扩展段地址 记录
        04 – 扩 线 性地址 记录
    dd 是 据域 ,  代表一      . 一 个记录 可以有    据字  . 记录当   据字    量必      度域(ll) 中指定的 数字相符.
    cc 
    是校验 和域 ,  表示 这个记录 的校  . 校  和的  算是通 过将记录当 中所有十六   编码数     相加, 以256    行以下 .

    表示为:“:[1字节长度][4字节地址][1字节记录类型][数据段][校验和] ”


      记录
    Intel HEX文件由任意 量以回 车换 行符  束的   记录组 .   记录  观如下:
    :10246200464C5549442050524F46494C4500464C33
    其中:
    10 
    是这个记录当  据字   数量.即0x10 
    2462 
    是数  被下  到存   当中的地址.即0x2462 
    00 
    是记录类(   记录).即0x00 
    464C…464C 数据.分别代表0x46,0x4C... 
    33 
    是这个记录的校 验和.即0x33


     线 性地址 记录(HEX386)
      线 性地址 记录 也叫作32 位地址 记录 HEX386 记录 .   记录 包含  据地址的高16 位.   线 性地址 记录总 是有 两个数 据字  ,  观如下:
    :02000004FFFFFC
    其中:
    02 
    是这个记录当  据字   数量.
    0000 
    是地址域, 对   线 性地址 记录 , 这个  总是0000.
    04 
    是记录类 04(   线 性地址 记录)
    FFFF 是地址的高16 位.
    FC 
    是这个记录的校  , 计算方法如下:
    01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
     个扩  线 性地址 记录   , 存    据域的   线 性地址被保存,    用于  Intel HEX 文件      后的 记录 . 线 性地址保持有效, 直到  被另外一 个扩 展地址 记录 所改 变.
       记录当 中的地址域  被移位的     线 性地址 记录 的地址  据相加     记录  绝对  储器地址.
    以下的例子演示了这个过 程..
       记录地址域的地址                       2462
     线 性地址 记录  数据域                      + FFFF
                                      ------------
    绝对  器地址                               FFFF2462

     展段地址 记录(HEX86)
     展段地址 记录 也叫HEX86 记录 ,  包括4-19 位  据地址段.  展段地址 记录总 是有 两个数 据字  ,  观如下:
    :020000021200EA
    其中:
    02 
    是记录当  据字   数量.
    0000 
    是地址域. 对  展段地址 记录 , 这个  总是0000.
    02 
    是记录类 02(  展段地址 记录)
    1200 是地址段.
    EA 
    是这个记录的校  , 计算方法如下:
    01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
     个扩 展段地址 记录   , 存    据域的  展段地址被保存,    用于  Intel HEX 文件      后的 记录 . 段地址保持有效,直到  被另外一 个扩 展地址 记录 所改 变.
       记录当 中的地址域  被移位的    展段地址 记录 的地址  据相加     记录  绝对  储器地址.
    以下的例子演示了这个过 程..
       记录地址域的地址                             2462
    展段地址 记录数据域                      +  1200
                                     ---------
    绝对  器地址                    00014462

    文件  (EOF) 记录
    Intel HEX文件必 以文件  (EOF) 记录结 . 这个记录  记录类 型域的    01.EOF 记录  观总是如下:
    :00000001FF
    其中:
    00 
    是记录当  据字   数量.
    0000 
    是数据被下  到存    中的地址. 在文件   记录当 中地址是  有意 义被忽略的.0000h 是典型的地址.
    01 
    是记录类 01( 文件   记录)
    FF  这个记录 的校  , 计算方法如下:
    01h + NOT(00h + 00h + 00h + 01h).


    Intel HEX
     文件例子:
    下面是一 完整的Intel HEX 文件的例子:
    :10001300AC12AD13AE10AF1112002F8E0E8F0F2244
    :10000300E50B250DF509E50A350CF5081200132259
    :03000000020023D8
    :0C002300787FE4F6D8FD7581130200031D
    :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
    :04003F00A42EFE22CB
    :00000001FF

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4063727

    1447074

    50

    421479

    取消
    发送
    23
  • dulai1985

    LV.1

    2013-09-28 11:08

    @dulai1985

    Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所  成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一  HEX 记录    记录 对应 机器    / 或常量  据的十六   编码数   成。Intel HEX 文件通常用于 传输将 被存于ROM 或者EPROM 中的程序和  据。大多 EPROM  程器或模 拟器使用Intel HEX 文件。
    记录 格式
    Intel HEX
     由任意数量的十六   记录组 成。每 个记录 包含5  域, 它们按以下格式排列:
    :llaaaatt[dd...]cc
    每一组字母 对应   不同的域,每一  字母 对应   十六   编码   字。每一  域由至少 两个 十六   编码数   成, 它们构 成一   ,就像以下描述的那 样:


    每个Intel HEX 记录 都由冒 号开头 .
    ll     度域,  代表 记录当   据字  (dd)  数量 .
    aaaa 
    是地址域, 它代表 记录当  数据的起始地址 . 
    tt 
    是代表HEX 记录类 型的域 ,  可能是以下    中的一 个:
        00 –   记录
        01 – 文件  记录
        02 – 扩展段地址 记录
        04 – 扩 线 性地址 记录
    dd 是 据域 ,  代表一      . 一 个记录 可以有    据字  . 记录当   据字    量必      度域(ll) 中指定的 数字相符.
    cc 
    是校验 和域 ,  表示 这个记录 的校  . 校  和的  算是通 过将记录当 中所有十六   编码数     相加, 以256    行以下 .

    表示为:“:[1字节长度][4字节地址][1字节记录类型][数据段][校验和] ”


      记录
    Intel HEX文件由任意 量以回 车换 行符  束的   记录组 .   记录  观如下:
    :10246200464C5549442050524F46494C4500464C33
    其中:
    10 
    是这个记录当  据字   数量.即0x10 
    2462 
    是数  被下  到存   当中的地址.即0x2462 
    00 
    是记录类(   记录).即0x00 
    464C…464C 数据.分别代表0x46,0x4C... 
    33 
    是这个记录的校 验和.即0x33


     线 性地址 记录(HEX386)
      线 性地址 记录 也叫作32 位地址 记录 HEX386 记录 .   记录 包含  据地址的高16 位.   线 性地址 记录总 是有 两个数 据字  ,  观如下:
    :02000004FFFFFC
    其中:
    02 
    是这个记录当  据字   数量.
    0000 
    是地址域, 对   线 性地址 记录 , 这个  总是0000.
    04 
    是记录类 04(   线 性地址 记录)
    FFFF 是地址的高16 位.
    FC 
    是这个记录的校  , 计算方法如下:
    01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
     个扩  线 性地址 记录   , 存    据域的   线 性地址被保存,    用于  Intel HEX 文件      后的 记录 . 线 性地址保持有效, 直到  被另外一 个扩 展地址 记录 所改 变.
       记录当 中的地址域  被移位的     线 性地址 记录 的地址  据相加     记录  绝对  储器地址.
    以下的例子演示了这个过 程..
       记录地址域的地址                       2462
     线 性地址 记录  数据域                      + FFFF
                                      ------------
    绝对  器地址                               FFFF2462

     展段地址 记录(HEX86)
     展段地址 记录 也叫HEX86 记录 ,  包括4-19 位  据地址段.  展段地址 记录总 是有 两个数 据字  ,  观如下:
    :020000021200EA
    其中:
    02 
    是记录当  据字   数量.
    0000 
    是地址域. 对  展段地址 记录 , 这个  总是0000.
    02 
    是记录类 02(  展段地址 记录)
    1200 是地址段.
    EA 
    是这个记录的校  , 计算方法如下:
    01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
     个扩 展段地址 记录   , 存    据域的  展段地址被保存,    用于  Intel HEX 文件      后的 记录 . 段地址保持有效,直到  被另外一 个扩 展地址 记录 所改 变.
       记录当 中的地址域  被移位的    展段地址 记录 的地址  据相加     记录  绝对  储器地址.
    以下的例子演示了这个过 程..
       记录地址域的地址                             2462
    展段地址 记录数据域                      +  1200
                                     ---------
    绝对  器地址                    00014462

    文件  (EOF) 记录
    Intel HEX文件必 以文件  (EOF) 记录结 . 这个记录  记录类 型域的    01.EOF 记录  观总是如下:
    :00000001FF
    其中:
    00 
    是记录当  据字   数量.
    0000 
    是数据被下  到存    中的地址. 在文件   记录当 中地址是  有意 义被忽略的.0000h 是典型的地址.
    01 
    是记录类 01( 文件   记录)
    FF  这个记录 的校  , 计算方法如下:
    01h + NOT(00h + 00h + 00h + 01h).


    Intel HEX
     文件例子:
    下面是一 完整的Intel HEX 文件的例子:
    :10001300AC12AD13AE10AF1112002F8E0E8F0F2244
    :10000300E50B250DF509E50A350CF5081200132259
    :03000000020023D8
    :0C002300787FE4F6D8FD7581130200031D
    :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
    :04003F00A42EFE22CB
    :00000001FF

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4063760

    1447074

    50

    421479

    取消
    发送
    24
  • dulai1985

    LV.1

    2013-10-24 15:47

    下面开始学习用库函数来学习串口通讯协议

    从STM32手册上看到了智能卡协议:

    智能卡通信协议破解智能卡的基础知识(转)

     
    智能卡无线小板相对于串口无线小板最大的不同是智能卡无线小板上的单片机要模仿真正的智能卡来发送和接收机顶盒的数据,这部分功能将直接决定整个无线GX系统的稳定性。
    智能卡常用的通信协议有T0、T1和T14协议,关于这三种通信协议完整的介绍,在很多资料上都能找到,本文不再详细阐述,有兴趣的朋友可以查阅相关书籍。
    本章节主要介绍BJST、YXTF、SMSX这三种智能卡的通信协议的关键技术和机顶盒智能卡命令、应答具体格式以及详细说明。
    首先介绍一下ATR(Answer To Reset,复位应答)。
    当加上供电电压、时钟和复位信号后,智能卡经DATA线送出其复位应答ATR。这个数据串最多含有33字节,总是按分频值(时钟频率转换因子)为372传送的,
    这是遵照ISO/IEC7816-3标准的规定。它含有关于传输协议和卡的各种数据,即使在ATR之后的传输协议使用的是不同的分频值(例如:512),也应当用372这个分频值来发送ATR。
    这就保证了从任何卡总能接收到一个ATR,而不管传输协议的参数是怎样的。需要大家注意的是,这里强调的是发送ATR的分频值总是372,但是并没有说发送ATR的波特率是固定的,波特率还要看机顶盒的智能卡槽的时钟频率是多少,ATR的波特率 = 机顶盒所加时钟频率/372。常用的机顶盒的智能卡槽的时钟频率有4.515MHz、4.9152MHz和3.5712MHz。
    YXTF、 SMSX智能卡用到的是标准的T0协议。BJST所使用的协议类似于T1协议,单不是标准的T1协议,是一种介于T0协议和T1协议之间的协议,我们暂时称之为TN协议。根据调试的经验,这三种智能卡都有一个规律:发送ATR的波特率和ATR之后的机顶盒命令、智能卡应答的波特率相同。
    下面我们来看YXTF智能卡命令和应答(按时间先后顺序)。
    STB:机顶盒。
    Card:智能卡。
    STB -> Card:机顶盒发送给智能卡。
    Card -> STB:智能卡发送给机顶盒。

    智能卡命令或应答
    传输方向,命令或应答的详细说明

    0x3b 0x6c 0x00 0x00 0x4e 0x54 0x49 0x43 0x30 0x91 0x69 0x00 0x4a 0x03 0x00 0x00
    Card -> STB。YXTF的ATR。

    0x00 0xa4 0x04 0x00 0x05 0xf9 0x5a 0x54 0x00 0x06
    STB -> Card。初始命令。

    0x90 0x00
    Card -> STB。表示智能卡收到了正确的初始命令

    0x80 0x46 0x00 0x00 0x040x01 0x00 0x00 0x04
    STB -> Card。获取智能卡号码命令。

    0x61 0x04
    Card -> STB。告知机顶盒号码占用0x04个字节。

    0x00 0xc0 0x00 0x00 0x04
    STB -> Card。读取智能卡号码。

    0xaa 0xbb 0xcc 0xdd0x90 0x00
    Card -> STB。告知机顶盒智能卡号码,并以0x90 0x00结尾告知机顶盒获取智能卡号码的命令被完整而成功地执行。

    0x80 0x46 0x00 0x00 0x040x03 0x00 0x00 0x09
    STB -> Card。获取智能卡年龄等级命令。

    0x61 0x09
    Card -> STB。告知机顶盒年龄等级信息占用0x09个字节

    0x00 0xc0 0x00 0x00 0x09
    STB -> Card。读取智能卡年龄等级信息。

    0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒智能卡年龄等级信息,并以0x90 0x00结尾告知机顶盒获取智能卡年龄等级的命令被完整而成功地执行。

    0x80 0x44 0x00 0x00 0x08
    STB -> Card。读取智能卡运营商信息。

    0x17 0x17 0x00 0x00 0x00 0x0a 0x00 0x00 0x90 0x00
    Card -> STB。告知机顶盒运营商信息,例如0x1717十进制为5911,表示第一个运营商是电话区号为0591的第一个城市。并以0x90 0x00结尾告知机顶盒获取智能卡年龄等级的命令被完整而成功地执行。

    0x80 0x4c 0x00 0x00 0x040xff 0xff 0xff 0xff
    STB -> Card。检查智能卡是否需要机卡配对。

    0x94 0xb2
    Card -> STB。如果为0x94 0xb2,说明此卡需要机卡配对。如果为0x94 0xb1,说明此卡不需要机卡配对。

    0x80 0x4c 0x00 0x00 0x040x5e 0xe4 0x82 0xf2
    STB -> Card。给卡发送四个配对字节:0x5e 0xe4 0x82 0xf2,看是否能配对成功

    0x90 0x00
    Card -> STB。如果为0x90 0x00,说明四个配对字节与此卡配对成功。如果回复其他数据,说明配对失败。

    0x80 0x46 0x17 0x17 0x040x04 0x00 0x00 0x48
    STB -> Card。获取运营商一产品包列表。其中0x17 0x17是运营商一的号码。

    0x61 0x48
    Card -> STB。告知机顶盒运营商一产品包列表占用0x48个字节

    0x00 0xc0 0x00 0x00 0x48
    STB -> Card。读取运营商一产品包列表。

    0x00….. 0x00(共0x48个) 0x90 0x00
    Card -> STB。返回运营商一产品包列表。并以0x90 0x00结尾告知机顶盒获取运营商一产品包列表的命令被完整而成功地执行。

    0x80 0x48 0x17 0x17 0x040x81 0x00 0x00 0x3e
    STB -> Card。获取运营商一授权信息。其中0x17 0x17是运营商一的号码。

    0x61 0x27
    Card -> STB。告知机顶盒运营商一授权信息占用0x27个字节

    0x00 0xc0 0x00 0x00 0x27
    STB -> Card。读取运营商一授权信息。

    0x00 0x00 0x09 0x00 0x00 0x00 0x00
    0x00 0x00 0x00 0x01 0x00 0x00 0x01 0x00
    0x00 0x00 0x80 0x00 0x00 0x01 0xff 0xfe
    0x00 0x00 0x00 0x02 0x00 0x01 0x00 0x01
    0x00 0x01 0x00 0x02 0x00 0x01 0x00 0x040x90 0x00
    Card -> STB。返回机顶盒运营商一授权信息。其中前三个字节0x00 0x00 0x09表示授权信息共有0x09条,以后每四个字节作为一条授权信息。例如0x00 0x01 0xff 0xfe表示ID号为65534(0xff fe)的节目,第二个字节0x01表示在界面上显示此节目ID,第二个字节为0x00表示不显示。

    0x80 0x46 0x00 0x0a 0x040x04 0x00 0x00 0x48
    STB -> Card。获取运营商二产品包列表。其中0x00 0x0a是运营商二的号码。

    0x61 0x48
    Card -> STB。告知机顶盒运营商二产品包列表占用0x48个字节

    0x00 0xc0 0x00 0x00 0x48
    STB -> Card。读取运营商二产品包列表。

    0x00….. 0x00(共0x48个) 0x90 0x00
    Card -> STB。返回运营商二产品包列表。并以0x90 0x00结尾告知机顶盒获取运营商二产品包列表的命令被完整而成功地执行。

    0x80 0x48 0x00 0x0a 0x040x81 0x00 0x00 0x3e
    STB -> Card。获取运营商二授权信息。其中0x00 0x0a是运营商二的号码。

    0x61 0x0b
    Card -> STB。告知机顶盒运营商二授权信息占用0x0b个字节

    0x00 0xc0 0x00 0x00 0x0b
    STB -> Card。读取运营商二授权信息。

    0x00 0x00 0x02 0x00 0x00 0x00 0x00
    0x00 0x00 0x00 0x010x90 0x00
    Card -> STB。返回机顶盒运营商一授权信息。其中前三个字节0x00 0x00 0x02表示授权信息共有0x02条。分析方法同上面运营商一授权信息的分析方法。


    上面是一个智能卡初始化比较全面的例子。一般的机顶盒不会有这么多初始化命令。
    需要说明以下几点:
    第一, T0协议的长度字节在第五个字节,长度字节加上5是整个命令的长度。

    第二,按照T0协议,机顶盒首先发送命令的前五个字节,等收到了PB(过程字节)之后,再发送后面的字节。不足五个字节的命令一次发完。以读取卡号的命令为例,第一步机顶盒先发送0x80 0x46 0x00 0x00 0x04;第二步智能卡选取第二个字节0x46作为过程字节回复机顶盒;第三步机顶盒再发送后面四个字节0x01 0x00 0x00 0x04;第四步智能卡回复0x61 0x04表示收到了机顶盒命令并成功执行,返回0x04表示卡号信息是四个字节;第五步机顶盒发送0x00 0xc0 0x00 0x00 0x04来读取卡号;第六步智能卡选取第二个字节0x0c作为过程字节回复机顶盒;第七步智能卡发送卡号信息0xaa 0xbb 0xcc 0xdd  0x90 0x00,以0x90 0x00结尾表示收到了机顶盒命令并成功执行。

    第三,智能卡接收到五个字节回复第二个字节作为过程字节,然后如何判断这个命令是否已经结束呢?方法是看开头是否是0x00 0xc0开头,如果是,此命令就是长度就是5,智能卡已经收到了完整的数据了。比如读取卡号命令0x00 0xc0 0x00 0x00 0x04,智能卡需要回复0x04个字节的卡号信息;如果不是0x00 0xc0开头,比如0x80 0x46 0x00 0x00 0x04,说明这个命令还有0x04要发。当然也有一个例外,获取运营商命令0x80 0x44 0x00 0x00 0x08,只有五个字节。我们在单片机程序设计中采用了这种方法。

    第四,机卡配对技术将作为单独的一章在后文中做详细介绍。

    机顶盒对智能卡完成这些初始化的“问题”后,就开始发送ECM。

    0x80 0x3a 0x17 0x17 0x53

    0xd6 0x2f 0xc0 0x44 0x0f 0x37 0x94 0x7d 0x02 0xba 0xe0 0x6e 0xa3 0x63 0x17 0x30 0xb3 0x8e 0x82 0x5b 0x81 0x9d 0xd9 0x95 0x4d 0xb0 0xd7 0x0d 0x9f 0x51 0xb6 0x57 0x02 0x09 0x00 0x01 0x00 0x01 0xd1 0x8f 0xaa 0x31 0xbe 0x44 0xae 0x40 0x8b 0x2b 0x45 0x12 0xda 0xce 0x50 0x33 0x09 0x00 0x01 0x00 0x03 0x1f 0xc9 0xf9 0xbb 0x80 0x9a 0x10 0x88 0x11 0xd4 0x5d 0x67 0xf9 0x3f 0x30 0x12 0x47 0x5b 0xfb 0x51 0x65 0x20 0x34 0x51

    STB -> Card。ECM,共88字节。0x17 0x17是运营商号。


    0x61 0x2b

    Card -> STB。告知机顶盒运CW共0x2b个字节,让机顶盒来读取。


    0x00 0xc0 0x00 0x00 0x2b

    STB -> Card。机顶盒读取CW命令。


    0x0a 0x17 0x17 0x44 0x0f 0x37 0x94 0x7d 0xab 0xec 0xe1 0x78 0x14 0x58 0xae 0x1a 0x4f 0xec 0x8d 0xc8 0x50 0x3c 0xbb 0x47 0x00 0x0c 0x5e 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    Card -> STB。CW。0xab 0xec 0xe1 0x78 0x14 0x58 0xae 0x1a 0x4f 0xec 0x8d 0xc8 0x50 0x3c 0xbb 0x47是用来解节目的有效数据。

    如果用户访问运营商授权信息页面,还有有以下的命令和回复。

    智能卡命令或应答
    传输方向,命令或应答的详细说明

    0x80 0x46 0x00 0x0a 0x040x02 0x00 0x00 0x16
    STB -> Card。获取运营商二信息的命令。

    0x61 0x16
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x16
    STB -> Card。读取运营商二信息的命令。

    0x00 0x0a 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商二信息。

    0x80 0x46 0x17 0x17 0x040x02 0x00 0x00 0x16
    STB -> Card。获取运营商一信息的命令。

    0x61 0x16
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x16
    STB -> Card。读取运营商一信息的命令。

    0x17 0x17 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商一信息。

    0x80 0x48 0x00 0x0a 0x040x01 0x00 0x00 0x13
    STB -> Card。获取运营商二授权信息。

    0x61 0x1d
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x1d
    STB -> Card。读取运营商二授权信息。

    0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x0c 0xd9 0x00 0x00 0x36 0x38 0xbf 0x7d 0x00 0x00 0x00 0x01 0x00 0x0b 0xe7 0x51 0xa6 0x36 0x38 0xbf 0x7d0x90 0x00
    Card -> STB。告知机顶盒运营商二授权信息。其中前三个字节0x00 0x00 0x02表示授权信息共有0x02条,以后每13个字节作为一条授权信息。具体解释同下面运营商一授权信息的解释。

    0x80 0x48 0x00 0x0a 0x040x02 0x00 0x00 0x14
    STB -> Card。获取运营商二未知信息。

    0x61 0x03
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x03
    STB -> Card。读取运营商二未知信息。

    0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商二未知信息。

    0x80 0x48 0x17 0x17 0x040x01 0x00 0x00 0x13
    STB -> Card。获取运营商一授权信息。

    0x61 0x78
    Card -> STB。

    0x00 0x00 0x09 0x00 0x00 0x00 0x00 0x00 0x0c 0xd9 0x00 0x00 0x36 0x38 0xbf 0x7d 0x00 0x00 0x00 0x01 0x00 0x0b 0xe7 0x51 0xa6 0x36 0x38 0xbf 0x7d 0x00 0x00 0x01 0x00 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x00 0x80 0x00 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0xff 0xfe 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x00 0x00 0x02 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0x00 0x01 0x00 0x0e 0x49 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0x00 0x02 0x00 0x0e 0x49 0x73 0x82 0x0f 0xb5 0xbf 0x7d 0x00 0x01 0x00 0x04 0x01 0x0e 0x3d 0x69 0x66 0x0f 0x4b 0x81 0xa50x90 0x00
    Card -> STB。告知机顶盒运营商一授权信息。
    其中前三个字节0x00 0x00 0x09表示授权信息共有0x09条,以后每13个字节作为一条授权信息。例如0x00 0x01 0xff 0xfe 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d表示ID为65534(0xff fe)的节目授权开始时间为0x0e 0xdf 0x73 0x82,结束时间为0x1d 0xf7 0xbf 0x7d,要在界面上显示出来,没有购买录像。
    第二个字节,0x01表示要在机顶盒运营商授权信息页面上显示,0x00表示不显示。
    第五个字节,0x00表示此节目没有购买录像,0x01表示此节目购买了录像。

    0x80 0x48 0x17 0x17 0x040x02 0x00 0x00 0x14
    STB -> Card。获取运营商一未知信息。

    0x61 0x03
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x03
    STB -> Card。读取运营商一未知信息。

    0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商一未知信息。



    下面我们来看SMSX智能卡命令和应答。SMSX与YXTF应答和命令比较相似。

    0x3b 0x02 0x17 0x72

    Card -> STB。SMSX的ATR。

    0x00 0xa4 0x04 0x00 0x02

    0x3f 0x00


    STB -> Card。初始命令一。
    0x90 0x00

    Card -> STB。表示智能卡收到了正确的初始命令一

    0x00 0xa4 0x04 0x00 0x02

    0x4a 0x00


    STB -> Card。初始命令二。

    0x90 0x00

    Card -> STB。表示智能卡收到了正确的初始命令二

    0x00 0xb2 0x00 0x05 0x06

    0x00 0x01 0xff 0x00 0x01 0xff


    STB -> Card。获取智能卡号码命令。

    0x61 0x67

    Card -> STB。告知机顶盒号码信息占用0x67个字节。

    0x00 0xc0 0x00 0x00 0x67

    STB -> Card。读取智能卡号码命令。

    0x00 0x01 0x64*

    0x04 0x11 0x22 0x33*

    0x83 0x50 0x11 0x06 0x82 0x31 0x73 0x13*

    0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xca 0xfd 0xc2 0xeb 0xca 0xd3 0xd1 0xb6 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x33 0x00 0x00 0x02 0x0b 0x5c 0x4b 0xa7 0x09

    0x90 0x00

    Card -> STB。告知机顶盒智能卡号码,并以0x90 0x00结尾告知机顶盒获取智能卡号码的命令被完整而成功地执行。其中83 50 11 06 82 31 73 13表示完整的智能卡卡号,也就是智能卡背面的条形码号码。0x04 0x11 0x22 0x33换算成相应的十进制68231731表示卡号从倒数第二位到倒数第九位的部分。

    0x80 0x32 0x00 0x00 0x44

    0x81 0x30 0x41 0x00 0x04 0xce 0x66 0xa3 0x4c 0x7b 0x89 0x70 0x50 0xd4 0x6b 0xae 0x0c 0xb8 0xd8 0x53 0x2e 0x74 0x12 0x03 0x5b 0xcd 0xc7 0x66 0xf6 0x8f 0x0c 0x96 0xa0
    0xa0 0xee 0x61 0xff 0x12 0xb2 0xa9 0xea
    0xb3 0x16 0xef 0x5e 0xc8 0xf3 0x88 0xff
    0x77 0x04 0x4d 0xf9 0x16 0xe0 0xac 0x90 0x97 0x73 0x6b 0x5e 0x24 0xee 0xfd 0xc6 0xbc 0xf4 0x71


    STB -> Card。ECM,共73字节。
    0x60 0x61 0x2a


    Card -> STB。告知机顶盒运CW共0x2a个字节,让机顶盒来读取。
    0x00 0xc0 0x00 0x00 0x2a

    STB -> Card。机顶盒读取CW命令。
    0x04 0xce 0x84 0x03 0x00 0x01 0x00 0x84 0x03 0x00 0x03 0xb0 0xb4 0x04 0x00 0x00 0x00 0x00 0x83 0x16 0xd6 0x31 0x03 0x80 *0xd0 0x8b 0x02 0x5d*0x00*0x42 0x29 0x86 0xf1 0x82 0x1c 0xfc 0x9a*0x00*0x3e 0x80 0x7c 0x3a

    0x90 0x00


    Card -> STB。CW。其中0xd0 0x8b 0x02 0x5d,0x42 0x29 0x86 0xf1 0x82 0x1c 0xfc 0x9a,0x3e 0x80 0x7c 0x3a是解加扰节目的关键数据。


    BJST所使用的TN协议是一种介于T0和T1之间的协议,长度在第三个字节。这种协议不像T0协议那样需要多次发送命令多次回复才能得到一条信息,TN协议只需要一问一答就能获得一条信息。下面我们来看BJST智能卡命令和应答。


    0x3b 0xe9 0x00 0x00 0x81 0x31 0xc3 0x45 0x99 0x63 0x74 0x69 0x19 0x99 0x12 0x56 0x10
    0xec


    Card -> STB。BJST的ATR。18字节。

    0x00 0x00 0x05

    0x00 0x84 0x00 0x00 0x10 0x91

    STB -> Card。初始命令一。第三个字节0x05加上4是整个命令的长度,最后一个字节0x91是前面所有字节异或后得到的校验字节。

    0x00 0x00 0x12

    0xe4 0x74 0x27 0xee 0xd2 0x9d 0xb0 0x25 0x5e 0xa6 0x98 0x97 0xd6 0xbe 0x10 0xbe 0x90 0x00 0x30


    Card -> STB。回复初始命令一。第三个字节0x12加上4是整个命令的长度。



    0x00
    0x00
    0x0e

    0x00 0x0c 0x00 0x00 0x10 0xe4 0x74 0x27 0xee
    0xd2 0x9d
    0xb0 0x25 0x56 0xc7


    STB -> Card。初始命令二。



    0x00 0x00 0x0a

    0xf1 0x3d 0x02 0x84 0xcf 0x51 0x0e 0xe1 0x90 0x00 0xa1


    Card -> STB。回复初始命令二。



    0x00 0x00 0x0e

    0x00 0x0b 0x00 0x00 0x10 0xf1 0x3d 0x02 0x84
    0xcf 0x51 0x0e
    0xe1 0x56
    0x78


    STB -> Card。初始命令三。



    0x00 0x00 0x02

    0x90 0x00 0x92


    Card -> STB。回复初始命令三。



    0x00 0x00 0x05

    0x81 0xd4 0x00 0x01 0x05 0x54


    STB -> Card。读取智能卡卡号。



    0x00 0x00 0x07

    0x00 0x00 0x01 0x33 0x11 0x90 0x00 0xb7


    Card -> STB。回复卡号信息。其中0x00 0x01 0x33 0x11换算成十进制78609是卡号。



    0x00 0x00 0x05

    0x81 0xd0 0x00 0x01 0x08 0x5d


    STB -> Card。读取智能卡解析CW的密钥。



    0x00 0x00 0x0a

    0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6 0x90
    0x00
    0xe9


    Card -> STB。回复解析CW的密钥。其中0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6是解析CW的密钥。



    0x00
    0x00
    0x49

    0x80
    0xea 0x80*0x00 0x16 0x00 0x00 0x3f
    0x90
    0x03 0x00 0x00 0x1c 0x85 0xa2 0x85
    0x8b 0x1e 0x88 0x43 0x22 0x8b 0xc9 0x6a
    0xc4 0x50 0x5c 0xf4 0x1c 0xfc 0xb8 0xc6
    0x63 0xe2 0x2b 0x95 0xe9 0xe8 0x8e 0xe2
    0x17 0xcf 0x93 0x07 0xa9 0xdc 0x28 0x52
    0x2e 0xca 0x21 0xc1 0x3c 0xaf 0x76 0x78
    0x82 0x50 0x24 0x97 0xfe 0x81 0xdb 0x2a
    0x28 0xb1 0x0b 0xbd 0xd1 0x2a 0x13 0x01 0x00
    0xf0


    STB -> Card。ECM。共77字节。



    0x00
    0x00
    0x13

    0x72 0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7
    0x90
    0x00
    0x1f


    Card -> STB。CW。其中0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7是CW的关键信息。这里还需要大家要着重注意的一点是:这16个字节是直接从智能卡里读出来的,但并不是直接用来解节目的。这16个字节,分为两部分,前8个字节和后8个字节,这两部分的8个字节分别与CW的密钥的8个字节异或之后才是真正用来解节目的信息。这是BJST与YXTF、SMSX不同的地方。具体程序为

    for(i=0; i<16; i++)


    tempcw=response[i+1]^difor[i%8];

    response[16] 是指0x72 0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7,difor[8]是密钥0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6,tempcw[16]是真正用来解节目的信息。




    程序设计者在设计程序时,无论是机顶盒还是智能卡无线小板上的单片机智能卡接口接收数据,都要设计成首先接收前三个字节,根据第三个字节再决定后面还有接收多少字节。


    七、 破解机卡配对
    所谓的机卡配对是指特定的某一张智能卡配上与之配对的一台机顶盒才能解节目。有部分YXTF智能卡使用了这项技术,为GX带来了麻烦。其实,只要知道了机卡配对的原理,要破解它也很容易。

    在初始化YXTF智能卡时,如果命令0x80 0x4c 0x00 0x00 0x040 xff 0xff 0xff 0xff后智能卡的回复是0x94 0xb2,说明这张智能卡是需要机卡配对的。如果没有给卡发送配对命令0x80 0x4c 0x00 0x00 0x04 0x5e 0xe4 0x82 0xf2,或者配对信息0x5e 0xe4 0x82 0xf2不对(每张卡的配对信息都不一样),机顶盒在解需要机卡配对的节目时,解节目就会失败。所以破解机卡配对的关键就在于给卡发送一个正确的机卡配对信息。在无线GX网络中,作为子机的原装机顶盒有机卡配对信息,但是母机没有,这就需要母机事先“学习”子机的配对信息,下次母机开机是就不用再获取子机的配对信息了。所谓母机的“学习”智能卡配对信息,就是在母机程序中加上一个功能:当子机将配对信息发给母机时,母机识别出此命令是配对命令(开命令的开头是否是0x80 0x4c 0x00 0x00 0x04),母机就把0x80 0x4c 0x00 0x00 0x04后的四个字节写到自己的FLASH中的一个文件yxtfkey.txt。等到下次开机时,母机从yxtfkey.txt读出配对信息的四个字节去跟对应的智能卡配对。如果配对成功,智能卡就认为母机是与之配对的机顶盒,当收到需要机卡配对节目的ECM时,就会非常“顺从”将正确的CW送出。所以,对于存在机卡配对的情况,只需对插卡的那台机器(母机)做机卡配对。插卡的机器完成配对后,其所带的所有无线网络、局域网或广域网的分机都不需要再做这个对应工作。如果母机没有配对成功,母机需要下一次“学习”。

    八、 关键技术
    在无线GX系统中,比较关键的技术有以下几点:

    第一,
    智能卡无线小板单片机定时器的时间设定。不同的机顶盒,智能卡的时钟频率是不一样的,所以智能卡通信的波特率也不一样。具体频率是多少需要用示-波-器测量,然后计算出智能卡通信每位所占用的时间,从而进一步设定定时器的时间。如果机顶盒与智能卡还是不能顺利的通信,需要用示-波-器对比读真卡时数据的波形,调整定时器时间,让智能卡无线小板DATA脚的波形模仿真卡的波形。根据调试的经验,一般情况,只要智能卡发送数据能被机顶盒正确接收,智能卡接收数据就没有问题。

    第二,
    缩短使用T0通信协议智能卡的子机ECM和CW之间的时间间隔。机顶盒每次换台时,如果换的新节目是加扰的,要向智能卡发送新的ECM。如果ECM和CW之间的时间间隔太长,换台的时间间隔也很长,影响收看节目的质量。

    以 YXTF无线GX为例,母机从发送ECM到CW的过程是:机顶盒发送ECM->智能卡解析ECM->智能卡回复0x61 0x2b->机顶盒发送0x00 0xc0 0x00 0x00 0x2b->智能卡回复CW。子机的这个过程可以是:机顶盒发送ECM->仿真智能卡回复0x61 0x2b->机顶盒发送0x00 0xc0 0x00 0x00 0x2b->无线发送ECM->母机解析出CW并将CW无线发给子机->仿真智能卡回复CW。但是“无线发送ECM”和“母机解析出 CW并将CW无线发给子机”包含无线传输和母机与真正智能卡对话这两个过程,需要消耗约0.5s的时间,换台时间比较长。我们可以统筹一下,一旦得到 ECM后就立刻无线发给母机,所以可以是:机顶盒发送ECM->仿真智能卡回复0x61 0x2b->无线发送ECM ->机顶盒发送0x00 0xc0 0x00 0x00 0x2b ->母机解析出CW并将CW无线发给子机->仿真智能卡回复CW。但是根据调试经验,这样也有一个问题,无线发送ECM是一个连续的过程,大约需要消耗67ms,而机顶盒在收到0x61 0x2b后约50ms后就发出0x00 0xc0 0x00 0x00 0x2b。价格低廉的8位51核的单片机程序运行是实时单任务,也就是说单片机由于无线发送ECM而错过了接收0x00 0xc0 0x00 0x00 0x2b,当然也就没有回复过程字节0xc0,“聪明”一些的机顶盒会在3s之后重新发送0x00 0xc0 0x00 0x00 0x2b,这时单片机才会把过程字节0xc0和CW回复给机顶盒,这样的话换台时间将会变成恐怖的3s以上。没有重发功能的机顶盒就认为没有接收到CW,导致解节目失败。所以我们要相办法延迟机顶盒发送0x00 0xc0 0x00 0x00 0x2b,为此,我们可以按照以下流程设计:

    总之一个原则是尽早把ECM发给母机,让母机处理ECM与子机机顶盒和仿真智能卡的对话过程同时进行,等接收到了正确的CW,并且收到了子机发送的命令0x00 0xc0 0x00 0x00 0x2b ,立刻将CW发给子机。

    第三,对于T0协议的智能卡,因为子机从发送ECM到得到CW包含了母机访问真正智能卡的过程,所以缩短母机访问真正智能卡这个过程的时间才是缩短子机换台时间的根本。母机访问真正智能卡时间的长短可以通过调整母机机顶盒的程序来调整

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4079667

    1447074

    50

    421479

    取消
    发送
    25
  • dulai1985

    LV.1

    2013-10-24 15:51

    @dulai1985

    下面开始学习用库函数来学习串口通讯协议

    从STM32手册上看到了智能卡协议:

    智能卡通信协议破解智能卡的基础知识(转)

     
    智能卡无线小板相对于串口无线小板最大的不同是智能卡无线小板上的单片机要模仿真正的智能卡来发送和接收机顶盒的数据,这部分功能将直接决定整个无线GX系统的稳定性。
    智能卡常用的通信协议有T0、T1和T14协议,关于这三种通信协议完整的介绍,在很多资料上都能找到,本文不再详细阐述,有兴趣的朋友可以查阅相关书籍。
    本章节主要介绍BJST、YXTF、SMSX这三种智能卡的通信协议的关键技术和机顶盒智能卡命令、应答具体格式以及详细说明。
    首先介绍一下ATR(Answer To Reset,复位应答)。
    当加上供电电压、时钟和复位信号后,智能卡经DATA线送出其复位应答ATR。这个数据串最多含有33字节,总是按分频值(时钟频率转换因子)为372传送的,
    这是遵照ISO/IEC7816-3标准的规定。它含有关于传输协议和卡的各种数据,即使在ATR之后的传输协议使用的是不同的分频值(例如:512),也应当用372这个分频值来发送ATR。
    这就保证了从任何卡总能接收到一个ATR,而不管传输协议的参数是怎样的。需要大家注意的是,这里强调的是发送ATR的分频值总是372,但是并没有说发送ATR的波特率是固定的,波特率还要看机顶盒的智能卡槽的时钟频率是多少,ATR的波特率 = 机顶盒所加时钟频率/372。常用的机顶盒的智能卡槽的时钟频率有4.515MHz、4.9152MHz和3.5712MHz。
    YXTF、 SMSX智能卡用到的是标准的T0协议。BJST所使用的协议类似于T1协议,单不是标准的T1协议,是一种介于T0协议和T1协议之间的协议,我们暂时称之为TN协议。根据调试的经验,这三种智能卡都有一个规律:发送ATR的波特率和ATR之后的机顶盒命令、智能卡应答的波特率相同。
    下面我们来看YXTF智能卡命令和应答(按时间先后顺序)。
    STB:机顶盒。
    Card:智能卡。
    STB -> Card:机顶盒发送给智能卡。
    Card -> STB:智能卡发送给机顶盒。

    智能卡命令或应答
    传输方向,命令或应答的详细说明

    0x3b 0x6c 0x00 0x00 0x4e 0x54 0x49 0x43 0x30 0x91 0x69 0x00 0x4a 0x03 0x00 0x00
    Card -> STB。YXTF的ATR。

    0x00 0xa4 0x04 0x00 0x05 0xf9 0x5a 0x54 0x00 0x06
    STB -> Card。初始命令。

    0x90 0x00
    Card -> STB。表示智能卡收到了正确的初始命令

    0x80 0x46 0x00 0x00 0x040x01 0x00 0x00 0x04
    STB -> Card。获取智能卡号码命令。

    0x61 0x04
    Card -> STB。告知机顶盒号码占用0x04个字节。

    0x00 0xc0 0x00 0x00 0x04
    STB -> Card。读取智能卡号码。

    0xaa 0xbb 0xcc 0xdd0x90 0x00
    Card -> STB。告知机顶盒智能卡号码,并以0x90 0x00结尾告知机顶盒获取智能卡号码的命令被完整而成功地执行。

    0x80 0x46 0x00 0x00 0x040x03 0x00 0x00 0x09
    STB -> Card。获取智能卡年龄等级命令。

    0x61 0x09
    Card -> STB。告知机顶盒年龄等级信息占用0x09个字节

    0x00 0xc0 0x00 0x00 0x09
    STB -> Card。读取智能卡年龄等级信息。

    0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒智能卡年龄等级信息,并以0x90 0x00结尾告知机顶盒获取智能卡年龄等级的命令被完整而成功地执行。

    0x80 0x44 0x00 0x00 0x08
    STB -> Card。读取智能卡运营商信息。

    0x17 0x17 0x00 0x00 0x00 0x0a 0x00 0x00 0x90 0x00
    Card -> STB。告知机顶盒运营商信息,例如0x1717十进制为5911,表示第一个运营商是电话区号为0591的第一个城市。并以0x90 0x00结尾告知机顶盒获取智能卡年龄等级的命令被完整而成功地执行。

    0x80 0x4c 0x00 0x00 0x040xff 0xff 0xff 0xff
    STB -> Card。检查智能卡是否需要机卡配对。

    0x94 0xb2
    Card -> STB。如果为0x94 0xb2,说明此卡需要机卡配对。如果为0x94 0xb1,说明此卡不需要机卡配对。

    0x80 0x4c 0x00 0x00 0x040x5e 0xe4 0x82 0xf2
    STB -> Card。给卡发送四个配对字节:0x5e 0xe4 0x82 0xf2,看是否能配对成功

    0x90 0x00
    Card -> STB。如果为0x90 0x00,说明四个配对字节与此卡配对成功。如果回复其他数据,说明配对失败。

    0x80 0x46 0x17 0x17 0x040x04 0x00 0x00 0x48
    STB -> Card。获取运营商一产品包列表。其中0x17 0x17是运营商一的号码。

    0x61 0x48
    Card -> STB。告知机顶盒运营商一产品包列表占用0x48个字节

    0x00 0xc0 0x00 0x00 0x48
    STB -> Card。读取运营商一产品包列表。

    0x00….. 0x00(共0x48个) 0x90 0x00
    Card -> STB。返回运营商一产品包列表。并以0x90 0x00结尾告知机顶盒获取运营商一产品包列表的命令被完整而成功地执行。

    0x80 0x48 0x17 0x17 0x040x81 0x00 0x00 0x3e
    STB -> Card。获取运营商一授权信息。其中0x17 0x17是运营商一的号码。

    0x61 0x27
    Card -> STB。告知机顶盒运营商一授权信息占用0x27个字节

    0x00 0xc0 0x00 0x00 0x27
    STB -> Card。读取运营商一授权信息。

    0x00 0x00 0x09 0x00 0x00 0x00 0x00
    0x00 0x00 0x00 0x01 0x00 0x00 0x01 0x00
    0x00 0x00 0x80 0x00 0x00 0x01 0xff 0xfe
    0x00 0x00 0x00 0x02 0x00 0x01 0x00 0x01
    0x00 0x01 0x00 0x02 0x00 0x01 0x00 0x040x90 0x00
    Card -> STB。返回机顶盒运营商一授权信息。其中前三个字节0x00 0x00 0x09表示授权信息共有0x09条,以后每四个字节作为一条授权信息。例如0x00 0x01 0xff 0xfe表示ID号为65534(0xff fe)的节目,第二个字节0x01表示在界面上显示此节目ID,第二个字节为0x00表示不显示。

    0x80 0x46 0x00 0x0a 0x040x04 0x00 0x00 0x48
    STB -> Card。获取运营商二产品包列表。其中0x00 0x0a是运营商二的号码。

    0x61 0x48
    Card -> STB。告知机顶盒运营商二产品包列表占用0x48个字节

    0x00 0xc0 0x00 0x00 0x48
    STB -> Card。读取运营商二产品包列表。

    0x00….. 0x00(共0x48个) 0x90 0x00
    Card -> STB。返回运营商二产品包列表。并以0x90 0x00结尾告知机顶盒获取运营商二产品包列表的命令被完整而成功地执行。

    0x80 0x48 0x00 0x0a 0x040x81 0x00 0x00 0x3e
    STB -> Card。获取运营商二授权信息。其中0x00 0x0a是运营商二的号码。

    0x61 0x0b
    Card -> STB。告知机顶盒运营商二授权信息占用0x0b个字节

    0x00 0xc0 0x00 0x00 0x0b
    STB -> Card。读取运营商二授权信息。

    0x00 0x00 0x02 0x00 0x00 0x00 0x00
    0x00 0x00 0x00 0x010x90 0x00
    Card -> STB。返回机顶盒运营商一授权信息。其中前三个字节0x00 0x00 0x02表示授权信息共有0x02条。分析方法同上面运营商一授权信息的分析方法。


    上面是一个智能卡初始化比较全面的例子。一般的机顶盒不会有这么多初始化命令。
    需要说明以下几点:
    第一, T0协议的长度字节在第五个字节,长度字节加上5是整个命令的长度。

    第二,按照T0协议,机顶盒首先发送命令的前五个字节,等收到了PB(过程字节)之后,再发送后面的字节。不足五个字节的命令一次发完。以读取卡号的命令为例,第一步机顶盒先发送0x80 0x46 0x00 0x00 0x04;第二步智能卡选取第二个字节0x46作为过程字节回复机顶盒;第三步机顶盒再发送后面四个字节0x01 0x00 0x00 0x04;第四步智能卡回复0x61 0x04表示收到了机顶盒命令并成功执行,返回0x04表示卡号信息是四个字节;第五步机顶盒发送0x00 0xc0 0x00 0x00 0x04来读取卡号;第六步智能卡选取第二个字节0x0c作为过程字节回复机顶盒;第七步智能卡发送卡号信息0xaa 0xbb 0xcc 0xdd  0x90 0x00,以0x90 0x00结尾表示收到了机顶盒命令并成功执行。

    第三,智能卡接收到五个字节回复第二个字节作为过程字节,然后如何判断这个命令是否已经结束呢?方法是看开头是否是0x00 0xc0开头,如果是,此命令就是长度就是5,智能卡已经收到了完整的数据了。比如读取卡号命令0x00 0xc0 0x00 0x00 0x04,智能卡需要回复0x04个字节的卡号信息;如果不是0x00 0xc0开头,比如0x80 0x46 0x00 0x00 0x04,说明这个命令还有0x04要发。当然也有一个例外,获取运营商命令0x80 0x44 0x00 0x00 0x08,只有五个字节。我们在单片机程序设计中采用了这种方法。

    第四,机卡配对技术将作为单独的一章在后文中做详细介绍。

    机顶盒对智能卡完成这些初始化的“问题”后,就开始发送ECM。

    0x80 0x3a 0x17 0x17 0x53

    0xd6 0x2f 0xc0 0x44 0x0f 0x37 0x94 0x7d 0x02 0xba 0xe0 0x6e 0xa3 0x63 0x17 0x30 0xb3 0x8e 0x82 0x5b 0x81 0x9d 0xd9 0x95 0x4d 0xb0 0xd7 0x0d 0x9f 0x51 0xb6 0x57 0x02 0x09 0x00 0x01 0x00 0x01 0xd1 0x8f 0xaa 0x31 0xbe 0x44 0xae 0x40 0x8b 0x2b 0x45 0x12 0xda 0xce 0x50 0x33 0x09 0x00 0x01 0x00 0x03 0x1f 0xc9 0xf9 0xbb 0x80 0x9a 0x10 0x88 0x11 0xd4 0x5d 0x67 0xf9 0x3f 0x30 0x12 0x47 0x5b 0xfb 0x51 0x65 0x20 0x34 0x51

    STB -> Card。ECM,共88字节。0x17 0x17是运营商号。


    0x61 0x2b

    Card -> STB。告知机顶盒运CW共0x2b个字节,让机顶盒来读取。


    0x00 0xc0 0x00 0x00 0x2b

    STB -> Card。机顶盒读取CW命令。


    0x0a 0x17 0x17 0x44 0x0f 0x37 0x94 0x7d 0xab 0xec 0xe1 0x78 0x14 0x58 0xae 0x1a 0x4f 0xec 0x8d 0xc8 0x50 0x3c 0xbb 0x47 0x00 0x0c 0x5e 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    Card -> STB。CW。0xab 0xec 0xe1 0x78 0x14 0x58 0xae 0x1a 0x4f 0xec 0x8d 0xc8 0x50 0x3c 0xbb 0x47是用来解节目的有效数据。

    如果用户访问运营商授权信息页面,还有有以下的命令和回复。

    智能卡命令或应答
    传输方向,命令或应答的详细说明

    0x80 0x46 0x00 0x0a 0x040x02 0x00 0x00 0x16
    STB -> Card。获取运营商二信息的命令。

    0x61 0x16
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x16
    STB -> Card。读取运营商二信息的命令。

    0x00 0x0a 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商二信息。

    0x80 0x46 0x17 0x17 0x040x02 0x00 0x00 0x16
    STB -> Card。获取运营商一信息的命令。

    0x61 0x16
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x16
    STB -> Card。读取运营商一信息的命令。

    0x17 0x17 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商一信息。

    0x80 0x48 0x00 0x0a 0x040x01 0x00 0x00 0x13
    STB -> Card。获取运营商二授权信息。

    0x61 0x1d
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x1d
    STB -> Card。读取运营商二授权信息。

    0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x0c 0xd9 0x00 0x00 0x36 0x38 0xbf 0x7d 0x00 0x00 0x00 0x01 0x00 0x0b 0xe7 0x51 0xa6 0x36 0x38 0xbf 0x7d0x90 0x00
    Card -> STB。告知机顶盒运营商二授权信息。其中前三个字节0x00 0x00 0x02表示授权信息共有0x02条,以后每13个字节作为一条授权信息。具体解释同下面运营商一授权信息的解释。

    0x80 0x48 0x00 0x0a 0x040x02 0x00 0x00 0x14
    STB -> Card。获取运营商二未知信息。

    0x61 0x03
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x03
    STB -> Card。读取运营商二未知信息。

    0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商二未知信息。

    0x80 0x48 0x17 0x17 0x040x01 0x00 0x00 0x13
    STB -> Card。获取运营商一授权信息。

    0x61 0x78
    Card -> STB。

    0x00 0x00 0x09 0x00 0x00 0x00 0x00 0x00 0x0c 0xd9 0x00 0x00 0x36 0x38 0xbf 0x7d 0x00 0x00 0x00 0x01 0x00 0x0b 0xe7 0x51 0xa6 0x36 0x38 0xbf 0x7d 0x00 0x00 0x01 0x00 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x00 0x80 0x00 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0xff 0xfe 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x00 0x00 0x02 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0x00 0x01 0x00 0x0e 0x49 0x73 0x82 0x1d 0xf7 0xbf 0x7d 0x00 0x01 0x00 0x02 0x00 0x0e 0x49 0x73 0x82 0x0f 0xb5 0xbf 0x7d 0x00 0x01 0x00 0x04 0x01 0x0e 0x3d 0x69 0x66 0x0f 0x4b 0x81 0xa50x90 0x00
    Card -> STB。告知机顶盒运营商一授权信息。
    其中前三个字节0x00 0x00 0x09表示授权信息共有0x09条,以后每13个字节作为一条授权信息。例如0x00 0x01 0xff 0xfe 0x00 0x0e 0xdf 0x73 0x82 0x1d 0xf7 0xbf 0x7d表示ID为65534(0xff fe)的节目授权开始时间为0x0e 0xdf 0x73 0x82,结束时间为0x1d 0xf7 0xbf 0x7d,要在界面上显示出来,没有购买录像。
    第二个字节,0x01表示要在机顶盒运营商授权信息页面上显示,0x00表示不显示。
    第五个字节,0x00表示此节目没有购买录像,0x01表示此节目购买了录像。

    0x80 0x48 0x17 0x17 0x040x02 0x00 0x00 0x14
    STB -> Card。获取运营商一未知信息。

    0x61 0x03
    Card -> STB。

    0x00 0xc0 0x00 0x00 0x03
    STB -> Card。读取运营商一未知信息。

    0x00 0x00 0x000x90 0x00
    Card -> STB。告知机顶盒运营商一未知信息。



    下面我们来看SMSX智能卡命令和应答。SMSX与YXTF应答和命令比较相似。

    0x3b 0x02 0x17 0x72

    Card -> STB。SMSX的ATR。

    0x00 0xa4 0x04 0x00 0x02

    0x3f 0x00


    STB -> Card。初始命令一。
    0x90 0x00

    Card -> STB。表示智能卡收到了正确的初始命令一

    0x00 0xa4 0x04 0x00 0x02

    0x4a 0x00


    STB -> Card。初始命令二。

    0x90 0x00

    Card -> STB。表示智能卡收到了正确的初始命令二

    0x00 0xb2 0x00 0x05 0x06

    0x00 0x01 0xff 0x00 0x01 0xff


    STB -> Card。获取智能卡号码命令。

    0x61 0x67

    Card -> STB。告知机顶盒号码信息占用0x67个字节。

    0x00 0xc0 0x00 0x00 0x67

    STB -> Card。读取智能卡号码命令。

    0x00 0x01 0x64*

    0x04 0x11 0x22 0x33*

    0x83 0x50 0x11 0x06 0x82 0x31 0x73 0x13*

    0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xca 0xfd 0xc2 0xeb 0xca 0xd3 0xd1 0xb6 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x33 0x00 0x00 0x02 0x0b 0x5c 0x4b 0xa7 0x09

    0x90 0x00

    Card -> STB。告知机顶盒智能卡号码,并以0x90 0x00结尾告知机顶盒获取智能卡号码的命令被完整而成功地执行。其中83 50 11 06 82 31 73 13表示完整的智能卡卡号,也就是智能卡背面的条形码号码。0x04 0x11 0x22 0x33换算成相应的十进制68231731表示卡号从倒数第二位到倒数第九位的部分。

    0x80 0x32 0x00 0x00 0x44

    0x81 0x30 0x41 0x00 0x04 0xce 0x66 0xa3 0x4c 0x7b 0x89 0x70 0x50 0xd4 0x6b 0xae 0x0c 0xb8 0xd8 0x53 0x2e 0x74 0x12 0x03 0x5b 0xcd 0xc7 0x66 0xf6 0x8f 0x0c 0x96 0xa0
    0xa0 0xee 0x61 0xff 0x12 0xb2 0xa9 0xea
    0xb3 0x16 0xef 0x5e 0xc8 0xf3 0x88 0xff
    0x77 0x04 0x4d 0xf9 0x16 0xe0 0xac 0x90 0x97 0x73 0x6b 0x5e 0x24 0xee 0xfd 0xc6 0xbc 0xf4 0x71


    STB -> Card。ECM,共73字节。
    0x60 0x61 0x2a


    Card -> STB。告知机顶盒运CW共0x2a个字节,让机顶盒来读取。
    0x00 0xc0 0x00 0x00 0x2a

    STB -> Card。机顶盒读取CW命令。
    0x04 0xce 0x84 0x03 0x00 0x01 0x00 0x84 0x03 0x00 0x03 0xb0 0xb4 0x04 0x00 0x00 0x00 0x00 0x83 0x16 0xd6 0x31 0x03 0x80 *0xd0 0x8b 0x02 0x5d*0x00*0x42 0x29 0x86 0xf1 0x82 0x1c 0xfc 0x9a*0x00*0x3e 0x80 0x7c 0x3a

    0x90 0x00


    Card -> STB。CW。其中0xd0 0x8b 0x02 0x5d,0x42 0x29 0x86 0xf1 0x82 0x1c 0xfc 0x9a,0x3e 0x80 0x7c 0x3a是解加扰节目的关键数据。


    BJST所使用的TN协议是一种介于T0和T1之间的协议,长度在第三个字节。这种协议不像T0协议那样需要多次发送命令多次回复才能得到一条信息,TN协议只需要一问一答就能获得一条信息。下面我们来看BJST智能卡命令和应答。


    0x3b 0xe9 0x00 0x00 0x81 0x31 0xc3 0x45 0x99 0x63 0x74 0x69 0x19 0x99 0x12 0x56 0x10
    0xec


    Card -> STB。BJST的ATR。18字节。

    0x00 0x00 0x05

    0x00 0x84 0x00 0x00 0x10 0x91

    STB -> Card。初始命令一。第三个字节0x05加上4是整个命令的长度,最后一个字节0x91是前面所有字节异或后得到的校验字节。

    0x00 0x00 0x12

    0xe4 0x74 0x27 0xee 0xd2 0x9d 0xb0 0x25 0x5e 0xa6 0x98 0x97 0xd6 0xbe 0x10 0xbe 0x90 0x00 0x30


    Card -> STB。回复初始命令一。第三个字节0x12加上4是整个命令的长度。



    0x00
    0x00
    0x0e

    0x00 0x0c 0x00 0x00 0x10 0xe4 0x74 0x27 0xee
    0xd2 0x9d
    0xb0 0x25 0x56 0xc7


    STB -> Card。初始命令二。



    0x00 0x00 0x0a

    0xf1 0x3d 0x02 0x84 0xcf 0x51 0x0e 0xe1 0x90 0x00 0xa1


    Card -> STB。回复初始命令二。



    0x00 0x00 0x0e

    0x00 0x0b 0x00 0x00 0x10 0xf1 0x3d 0x02 0x84
    0xcf 0x51 0x0e
    0xe1 0x56
    0x78


    STB -> Card。初始命令三。



    0x00 0x00 0x02

    0x90 0x00 0x92


    Card -> STB。回复初始命令三。



    0x00 0x00 0x05

    0x81 0xd4 0x00 0x01 0x05 0x54


    STB -> Card。读取智能卡卡号。



    0x00 0x00 0x07

    0x00 0x00 0x01 0x33 0x11 0x90 0x00 0xb7


    Card -> STB。回复卡号信息。其中0x00 0x01 0x33 0x11换算成十进制78609是卡号。



    0x00 0x00 0x05

    0x81 0xd0 0x00 0x01 0x08 0x5d


    STB -> Card。读取智能卡解析CW的密钥。



    0x00 0x00 0x0a

    0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6 0x90
    0x00
    0xe9


    Card -> STB。回复解析CW的密钥。其中0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6是解析CW的密钥。



    0x00
    0x00
    0x49

    0x80
    0xea 0x80*0x00 0x16 0x00 0x00 0x3f
    0x90
    0x03 0x00 0x00 0x1c 0x85 0xa2 0x85
    0x8b 0x1e 0x88 0x43 0x22 0x8b 0xc9 0x6a
    0xc4 0x50 0x5c 0xf4 0x1c 0xfc 0xb8 0xc6
    0x63 0xe2 0x2b 0x95 0xe9 0xe8 0x8e 0xe2
    0x17 0xcf 0x93 0x07 0xa9 0xdc 0x28 0x52
    0x2e 0xca 0x21 0xc1 0x3c 0xaf 0x76 0x78
    0x82 0x50 0x24 0x97 0xfe 0x81 0xdb 0x2a
    0x28 0xb1 0x0b 0xbd 0xd1 0x2a 0x13 0x01 0x00
    0xf0


    STB -> Card。ECM。共77字节。



    0x00
    0x00
    0x13

    0x72 0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7
    0x90
    0x00
    0x1f


    Card -> STB。CW。其中0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7是CW的关键信息。这里还需要大家要着重注意的一点是:这16个字节是直接从智能卡里读出来的,但并不是直接用来解节目的。这16个字节,分为两部分,前8个字节和后8个字节,这两部分的8个字节分别与CW的密钥的8个字节异或之后才是真正用来解节目的信息。这是BJST与YXTF、SMSX不同的地方。具体程序为

    for(i=0; i<16; i++)


    tempcw=response[i+1]^difor[i%8];

    response[16] 是指0x72 0x7f 0xca 0xfa 0xce 0x53 0x21 0xd2 0xb8 0x4f 0xaa 0x9b 0x3f 0xa8 0xc5 0xbc 0xe7,difor[8]是密钥0x24 0x3b 0x45 0xd8 0xab 0xf5 0x09 0xa6,tempcw[16]是真正用来解节目的信息。




    程序设计者在设计程序时,无论是机顶盒还是智能卡无线小板上的单片机智能卡接口接收数据,都要设计成首先接收前三个字节,根据第三个字节再决定后面还有接收多少字节。


    七、 破解机卡配对
    所谓的机卡配对是指特定的某一张智能卡配上与之配对的一台机顶盒才能解节目。有部分YXTF智能卡使用了这项技术,为GX带来了麻烦。其实,只要知道了机卡配对的原理,要破解它也很容易。

    在初始化YXTF智能卡时,如果命令0x80 0x4c 0x00 0x00 0x040 xff 0xff 0xff 0xff后智能卡的回复是0x94 0xb2,说明这张智能卡是需要机卡配对的。如果没有给卡发送配对命令0x80 0x4c 0x00 0x00 0x04 0x5e 0xe4 0x82 0xf2,或者配对信息0x5e 0xe4 0x82 0xf2不对(每张卡的配对信息都不一样),机顶盒在解需要机卡配对的节目时,解节目就会失败。所以破解机卡配对的关键就在于给卡发送一个正确的机卡配对信息。在无线GX网络中,作为子机的原装机顶盒有机卡配对信息,但是母机没有,这就需要母机事先“学习”子机的配对信息,下次母机开机是就不用再获取子机的配对信息了。所谓母机的“学习”智能卡配对信息,就是在母机程序中加上一个功能:当子机将配对信息发给母机时,母机识别出此命令是配对命令(开命令的开头是否是0x80 0x4c 0x00 0x00 0x04),母机就把0x80 0x4c 0x00 0x00 0x04后的四个字节写到自己的FLASH中的一个文件yxtfkey.txt。等到下次开机时,母机从yxtfkey.txt读出配对信息的四个字节去跟对应的智能卡配对。如果配对成功,智能卡就认为母机是与之配对的机顶盒,当收到需要机卡配对节目的ECM时,就会非常“顺从”将正确的CW送出。所以,对于存在机卡配对的情况,只需对插卡的那台机器(母机)做机卡配对。插卡的机器完成配对后,其所带的所有无线网络、局域网或广域网的分机都不需要再做这个对应工作。如果母机没有配对成功,母机需要下一次“学习”。

    八、 关键技术
    在无线GX系统中,比较关键的技术有以下几点:

    第一,
    智能卡无线小板单片机定时器的时间设定。不同的机顶盒,智能卡的时钟频率是不一样的,所以智能卡通信的波特率也不一样。具体频率是多少需要用示-波-器测量,然后计算出智能卡通信每位所占用的时间,从而进一步设定定时器的时间。如果机顶盒与智能卡还是不能顺利的通信,需要用示-波-器对比读真卡时数据的波形,调整定时器时间,让智能卡无线小板DATA脚的波形模仿真卡的波形。根据调试的经验,一般情况,只要智能卡发送数据能被机顶盒正确接收,智能卡接收数据就没有问题。

    第二,
    缩短使用T0通信协议智能卡的子机ECM和CW之间的时间间隔。机顶盒每次换台时,如果换的新节目是加扰的,要向智能卡发送新的ECM。如果ECM和CW之间的时间间隔太长,换台的时间间隔也很长,影响收看节目的质量。

    以 YXTF无线GX为例,母机从发送ECM到CW的过程是:机顶盒发送ECM->智能卡解析ECM->智能卡回复0x61 0x2b->机顶盒发送0x00 0xc0 0x00 0x00 0x2b->智能卡回复CW。子机的这个过程可以是:机顶盒发送ECM->仿真智能卡回复0x61 0x2b->机顶盒发送0x00 0xc0 0x00 0x00 0x2b->无线发送ECM->母机解析出CW并将CW无线发给子机->仿真智能卡回复CW。但是“无线发送ECM”和“母机解析出 CW并将CW无线发给子机”包含无线传输和母机与真正智能卡对话这两个过程,需要消耗约0.5s的时间,换台时间比较长。我们可以统筹一下,一旦得到 ECM后就立刻无线发给母机,所以可以是:机顶盒发送ECM->仿真智能卡回复0x61 0x2b->无线发送ECM ->机顶盒发送0x00 0xc0 0x00 0x00 0x2b ->母机解析出CW并将CW无线发给子机->仿真智能卡回复CW。但是根据调试经验,这样也有一个问题,无线发送ECM是一个连续的过程,大约需要消耗67ms,而机顶盒在收到0x61 0x2b后约50ms后就发出0x00 0xc0 0x00 0x00 0x2b。价格低廉的8位51核的单片机程序运行是实时单任务,也就是说单片机由于无线发送ECM而错过了接收0x00 0xc0 0x00 0x00 0x2b,当然也就没有回复过程字节0xc0,“聪明”一些的机顶盒会在3s之后重新发送0x00 0xc0 0x00 0x00 0x2b,这时单片机才会把过程字节0xc0和CW回复给机顶盒,这样的话换台时间将会变成恐怖的3s以上。没有重发功能的机顶盒就认为没有接收到CW,导致解节目失败。所以我们要相办法延迟机顶盒发送0x00 0xc0 0x00 0x00 0x2b,为此,我们可以按照以下流程设计:

    总之一个原则是尽早把ECM发给母机,让母机处理ECM与子机机顶盒和仿真智能卡的对话过程同时进行,等接收到了正确的CW,并且收到了子机发送的命令0x00 0xc0 0x00 0x00 0x2b ,立刻将CW发给子机。

    第三,对于T0协议的智能卡,因为子机从发送ECM到得到CW包含了母机访问真正智能卡的过程,所以缩短母机访问真正智能卡这个过程的时间才是缩短子机换台时间的根本。母机访问真正智能卡时间的长短可以通过调整母机机顶盒的程序来调整

    NRZ-1编码
    NRZ-I No Return Zero-Inverse   非归零反相编码
    在NRZ-I编码方式中,信号电平的一次反转代表比特1。
    就是说是从正电平到负电平的一次跃迁,而不是电压值本身,来代表一个比特1。
    0比特由没有电平变化的信号代表。
    非归零反相编码相对非归零电平编码的优点在于:因为每次遇到比特1都发生电平跃迁,这能提供一种同步机制。
    一串7个比特1会导致7次电平跃迁。
    每次跃迁都使接收方能根据信号的实际到达来对本身时钟进行重同步调整。
    根据统计,连续的比特1出现的几率比连续的比特0出现的几率大,因此对比特 1的连续串进行同步就在保持整体消息同步上前进了一大步。
    一串连续的比特0仍会造成麻烦,但由于连续0串出现不频繁,对于解码来说其妨碍就小了许多。
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4079675

    1447074

    50

    421479

    取消
    发送
    26
  • dulai1985

    LV.1

    2013-11-08 13:30

    @dulai1985

    NRZ-1编码
    NRZ-I No Return Zero-Inverse   非归零反相编码
    在NRZ-I编码方式中,信号电平的一次反转代表比特1。
    就是说是从正电平到负电平的一次跃迁,而不是电压值本身,来代表一个比特1。
    0比特由没有电平变化的信号代表。
    非归零反相编码相对非归零电平编码的优点在于:因为每次遇到比特1都发生电平跃迁,这能提供一种同步机制。
    一串7个比特1会导致7次电平跃迁。
    每次跃迁都使接收方能根据信号的实际到达来对本身时钟进行重同步调整。
    根据统计,连续的比特1出现的几率比连续的比特0出现的几率大,因此对比特 1的连续串进行同步就在保持整体消息同步上前进了一大步。
    一串连续的比特0仍会造成麻烦,但由于连续0串出现不频繁,对于解码来说其妨碍就小了许多。
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4082232

    1447074

    50

    421479

    取消
    发送
    27
  • dulai1985

    LV.1

    2013-11-08 13:33

    @dulai1985

    什么是 USB-OTG??

    http://wenku.baidu.com/view/cc8a98ea5ef7ba0d4a733b1b.html
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4082233

    1447074

    50

    421479

    取消
    发送
    28
  • dulai1985

    LV.1

    2013-11-08 13:37

    @dulai1985

    http://wenku.baidu.com/view/cc8a98ea5ef7ba0d4a733b1b.html
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4082234

    1447074

    50

    421479

    取消
    发送
    29
  • zeer

    LV.1

    2013-12-22 20:29

    @

    请问有没有好板子+资料推荐的,我想转到ARM学习
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    4085690

    1447074

    50

    580210

    取消
    发送
    30
  • 现在还没有回复呢,说说你的想法

     1 2 3 
  • 回复

  • 收藏

  • 点赞

  • 举报有害信息

  • 已超出发布时间24小时,无法编辑与删除
    关于我们 联系方法 广告服务 会议服务 电子星球APP 网站地图 不良信息举报 热线:400-003-2006
    © 2002-2021 Netbroad(网博互动)公司版权所有 津ICP备 11006234号-2 联网备案号:12010402000747 增值电信业务经营许可证:津B2-20120058