MTK收购VIA IP后的CDMA开发

来源:互联网 发布:java面向对象的4大特征 编辑:程序博客网 时间:2024/04/29 21:04
        上次说到,MTK 100亿新台币收购了VIA的CDMA2000 IP的使用权,就把我们已经自研了1年的Project给停掉了,要求全身心的投入到VIA CDMA与现有五模的整合, 造成的现象就是我们花了一年多的时间学习,没有任何产出。其实,有一点我倒现在也不明白,为何不是两个项目一起搞呢,意思就是说,把自研的CDMA继续下去,同时,为了能尽早出货,VIA IP的整合也同时做。这样不是更好吗? (个人觉得,至少从协议栈和基带层面是可以这样的)。 初始VIA的方案不可能跟MTK做的完全整合到一块单芯片中去的,因为它有自己独立的ASIC,这个集成是很花时间的。但最终的方案,肯定是要整合在一起的,不然,成本这一关是过不了的。

        第一步,RF的集成
        MTK做的第一步是RF的集成,因为VIA方案的RF是第三方的,而MTK有自己的固定的RF供应商,然后,主要也是为了节约成本,所以第一步是把VIA的RF替换掉,统一用MTK的RF。这个过程中,L1和RF Driver是比较忙的,因为他们都需要改动不少代码。
但协议栈 Team其实是不忙的,在学习了一年多协议,并且编写了大部分协议规定的代码的基础上来学习VIA的代码,还是比较轻松的,虽然,不得不说,VIA的EVDO代码是中国人写的,没有统一的代码风格不说,有些逻辑还很混乱,全局变量到处飞,不过逻辑错误还比较少。据说,1xRTT的代码是老外写的,风格就比较严谨,逻辑也比较清楚,VIA也是不知道从哪家老外公司买来的半成品加工的。
        所以,我们那时候的主要产出是各种学习文档,Traffic  MAC, Common MAC, RLP以及EVDO L2整体流程等学习文档,可以从里面看到,VIA的代码是没有加密这块的,好像也没有给加密留了什么接口,后来证实也确实不需要,所以我们当初自研时,调查如何完成加密方案是比较多余的。
        另外,我们还需要调查运营商的需求,以及过各种仪表的Case,主要是Spirent的仪表,对L2来说,其它Case都还好,就是与EVDO T2P相关的一系列Case(也就是C.S0038中规定的9.8.2.x系列Case)一直不能稳定的通过,然后分析下来,清一色的都是因为仪表和手机就什么时候需要一直回HARQ NAK不同步,有时候仪表NAK太早了,有时候仪表NAK太晚了。然后,作为EVDO T2P算法的Owner,我被要求去修改相关代码,使之能稳定通过。但改了几版之后,发现都是没有完全解决,把手机发送包的时间提前,这个Case稳定不过了,把手机发送包的时间延后,那个Case稳定不过了。
        那时候,仪表使用紧张,整个实验室就一套Spirent仪表,由于我调这几个Case占用了将近两个小时,可能导致其它Case没有来得急测试。 这个时候,部门经理发飙了,第一次见到他发飙,以前因为是英国人管理,所以交集也不多,自己倒没怎么在意,就事论事呗,调试本来不就要花时间的吗。但人家不跟你来这一套,好像你犯了多大的错似的,气势凌人,不跟你讨论技术,直接劈头盖脸的就一顿批评,哎,就这情商,也就是年纪大点,赶上好时候,要是放到现在,还不是喽喽一个。 学过任何管理学的常识都知道,批评要私下批评,表扬要公开表扬。人家不是的,反其道行之。哎,碰上这样的领导,只能是自认倒霉吧。希望以后不要被他逮到吧,那时候是这么自我安慰的。
        
        AP-IRAT阶段
        话说为了全模产品能尽快上市,所以MTK的第一个全模版本中的C2K Modem在C2K这边的改动量是很小的,RF也是各自独立控制的,遇到一些RAT切换场景的时候,是由AP这边根据5模Modem和C2K Modem的上报结果和场景来决定的,所以这个版本的名称叫AP-IRAT, 意思就是由AP来决定那些跨RAT的操作。这个方式的Modem不太稳定,又不是完全符合运营商的标准,成本也不低,所以开案的厂商很少,经历的时间也很短。

        SVLTE阶段
        所谓SVLTE,那就是Single Voice LTE的意思,双卡双待,但同一时刻只支持一个RAT的电话,也就是说同一时间只能一个RAT在打电话(上网不是的),所以1X(包含CDMA的CS域)和3GPP的GSM/WCDMA/TDSCDMA是需要做互操作的,也就是1x在打电话的时候,其它RAT是不能打电话的,但是这个时候事实上LTE/W/TD是能上网的,用户感受最也就是能别打电话,别上网。这个方式的缺点因为是双待,所以比较耗电,然后因为是两套天线,所以硬件成本也高,印象中,三星的Galaxy手机是支持这种制式的。
        这也是我们的第二代全模Modem产品,可以想到,这里面C2K的Modem仍然是独立的,没有跟3GPP的几模完全合成在一起,做这个产品差不多花了一年的时候才到稳定和大规模量产的阶段,主要涉及的改动是L1,L3,L4的改动。

        这个时候,作为L2 Team,能做的需要写代码的事情仍然不多,主要配合L1,L3,L4做一些相关的修改,但EVDO本身事情还是很多的,因为他时候另外一个同事因为比较专研算法去了算法组,然后,新进来的同事本身对EVDO了解的又还不够深,所以基本上整个EVDO L2的事情都我一个人在做。其中第一个分量最大的就是分析外场测试的Log,虽然,L2一般来说,前期都已经比较稳定了,但是因为VIA的代码之前都是单模的,也没有经过像MTK这么大规模的外场测试,所以从分析Log还是发现了一些新的问题的,而L2的问题,一般不像L3的大多是流程上的问题(从Log上就能完全看出来),通常需要花大量时间研究代码和Log才能真正找到Root Cause。
    
         其它的开发工作还包括:非信令模式的开发,主要是用于在HW没有Ready之前,让L1验证相关逻辑用的。 反向静默区间的优化,这是因为VIA对EVDO反向静默区的操作没有严格按照协议来,需要做相应的修改。也许部门经理觉得我们没事情做吧,所以还要求我们老大负责这个项目的外场测试的总协调人,按我们老大的风格,自然有一部分工作,会落到我头上了,于是我又负责写测试操作手册,还要跟着外场同事一起出去,请他们提意见,大冬天的出去了两三个星期等等。
        
        这一年(2014年),确实是我最辛苦的一年,几乎天天加班,早的八九点,晚的十点以后。老大对我的工作态度和成果也是很满意的,但去台湾参加Bring Up时,没有我,年终考评的时候,最好的也不是我,老大亲口说的,因为这些他做不了决定,是部门经理做的决定,尽管他觉得,对EVDO L2最熟的是我,这一年最辛苦,贡献最多的也是我,应该给我一个最优的,但是他确实是没有权力在这两件事情上做决定,部门经理才是大Boss,所以这一年到年终的时候,其实觉得还是很憋屈的,就因为我留给大Boss的第一印象不好,就变成了做了那么多事情都是徒劳。另外,更加觉得大Boss本身是一个独断专行,我行我素的一个人了,我相信我们老大还是建议过的,估计被大Boss一吼,就不敢多说什么了,这种场景我们可不是第一次见到。
        
        这一年,比较开心的事情,就是我跟我老婆,孩子凭着公司申请到高新技术企业而拿到了上海户口,名正言顺的成为上海人了,但这还要规功于前面两年没有跟这位大Boss一起共事时,我的考核一直比较好的原因。所以,公司申请到高新技术企业这件事幸亏来得早,运气还算不错。

        SRLTE阶段
        SRLTE就是Single Radio LTE,它的意思是单发送天线的LTE多模,接收天线有几跟根据运营商的需求来,可以是一根或两根。SRLTE是空闲的时候,LTE和CDMA1x都待,LTE上网时,1x会去收Paging,一旦1x打电话了,LTE就不能上网了,这里的好处显而易见,就是少了天线,降低成本,并且因为单天线,也会比较省电。这是Apple iPhone采用的方案,但因为iPhone都是单卡,所以相对而言比较简单,我们的SRLTE需要支持双卡,所以相对而言复杂度更高一些。
        这已经算是我们第三代的全模Modem产品了,同样在这个版本里,L2能做的事情并不多,还是做一些打酱油的事情,并且这个时候有另外两位同事参与到EVDO来了,所以我的压力也没有前一年那么大了。但是,因为其它组的人都已经习惯了,EVDO L2出什么问题,第一时间都还是找我,只是这次不再属于我负责的模块,我可以轻度的过一遍后,就转给其它同事了。
        因为EVDO的天线是由L2这边来决定打开的时间点的,天线被关闭L2也是需要及时知道的(以免做无用功)。然后,在SRLTE模式下,因为发送天线只有一根,所以被抢占的频率比以往任何时候都频繁。而EVDO又在多种情况下会主动打开和关闭TX 天线,包括:反向静默区时的打开和关闭,DRC Supervision的打开和关闭,以及被抢占时的打开和关闭。所以,在这代产品的开发过程中,反向业务信道遇到的最多的问题就是各种与开关Tx天线相关的Corner Case,然后,又因为VIA的代码关于这一段,相关的全局变量是到处飞,所以一旦遇到,通常又比较难改,而且容易改出问题来。
        正是基于以上原因,老大要求我把整个开关Tx Path的代码重新整理然后优化一遍,对于这一坨代码的修改,第一个想到的想法就是要使用状态机,但状态机如何设置,是一层状态机,还是两层状态机,一开始认为可能一层状态机更好,然后,在原来业务信道的状态基础上添加了十几种状态,发现写出来的代码,每一个状态,自己都要看好久才能明白是什么意思,于是,在第一遍代码快写完时,觉得不行,需要重新设计状态机,这次不轻易动手了,先想明白,原来的状态机作为外层状态机,考虑的是业务信道本身的状态,再加一层内部状态机,内部状态机表示的是Tx Path的状态,因为Tx Path的开关本身并不是一气呵成的,所以开关Tx  
Path也需要状态机。最终改出来的效果还不错。
    
        自动化测试脚本的编写,没办法,L2能做的事情实在是不多啊。 这是一个运行在手机上的APP,本身是吃TCL脚本,脚本可以下发AT命令,调用各种API来模拟Touch操作,然后,在咨询了这个APP的Owner各个API的使用方法以后,拿着3GPP Modem和C2K Modem的AT命令手册,我和另外一位同事(后来参与进来的)就开始这个脚本的编写了,总共写了17,18个脚本,主要是模拟外场测试和静态测试。外场测试本来是给出外场的同事用的,但因为外场同事已经习惯手动测试了,所以最后并没有采用,反而是静态测试被大规模使用了,主要是用来让研发同事在上库前,做一轮基本的测试以及晚上做Overnight Test,脚本主要包括开关机,3G,4G上网,发短信和彩信等内容,通过这些脚本的使用,发现了不少的Crash和逻辑上问题,保证了库上代码的正确性。
        有一阵子,MTK打算做Femto Cell,所以我们还重新温习了LTE的MAC层,RLC层和PDCP层的协议,并且写了相关的报告,我另外在另外一位同事的基础上完成了C.S0038的9.8.2.x的IT Case,还有年初的时候还和L1一位博士同事出差广州,调试GPS相关问题,总之,这一年做的事都很杂,没事的时候,老大就想出点事情来让我们做一做,但总的来说不是很忙,所以我才有时间经常往正在装修的新家跑一跑。

            大合成
          终于大合成的时机到来了,公司终于决定把C2K与3GPP Modem大合成了,底层使用统一的ASIC和DSP,上层使用统一的MIPS CPU,EVDO L2这边需要做的主要事情有:1. 与L1的新的接口方式需要重新定义,2. Memory管理方式的移植,3. 单CPU到多CPU时的同步方式的改变,4. 由于L1和ASIC的新设计方案引入的延迟,需要把L2反向部分从Task移植到HISR中运行,以保证时序。5. 还有就是在现有的3GPP Modem平台上提前测试C2K,以期提前发现一些后续可能遇到的一些通用性问题。6. 由于Logging方案的变化,需要重新修改相关API。
            这其中,第一项,在今年上半年就已经完成的差不多了,我主要负责的是第二,第四和第五项,第二项在移值过程中发现了申请到的Memory不是Noncacheable的,需要强制改成noncacheable的情况,当前已经完成的差不多了,与3GPP各RAT共享相关的Memory。第四项,相关代码和UT已经编写完成,当前正在FPGA上验证其正确性。第五项,从今年年初开始,一直在做,反正遇到了各种各样的问题,如指针领移时,没有考虑指针类型,关中断的情况下去调用系统函数,用关中断去保护多个CPU共用的变量等等问题。
            另外还插出一件SRLTE项目的事情来,今年年中,我们打算进军美国的LG的第一批手机在美国VZW和Sprint下进行测试,发现无论在好的信道条件下,还是在差的信道条件下,吞吐量低于对比机好多,无法通过测试。然后,我们在前期一个月的零散攻关中没有找到有效的办法,也没有什么头绪,但客户要求在一个月内就完全解决,时间紧,任务重。大Boss决定,从各个相关Team中调集人员,然后关在一起进行攻关,其中过程,我已经不想多说,反正中间有我,反正结果是经过近一个月的分析,总结,修改,再分析,再总结,再修改,问题是解决了,然后,我在大Boss中的印象是更差了,都快萌生跳槽的念头了。

        总结
        回顾接手后VIA IP的这几年,最开心的事情是终于有我写的代码的产品上市了,很多的手机用了我们的SVLTE和SRLTE Modem,不开心的事情,这几年跟大Boss的关系没有搞好。看来,以后要多加强人际交往方面的训练啊。最近看了一本叫《软技能,代码之外的生存技能》,觉得各中道理确实写的不错,程序员也是社会人,不能光专注于技术,同样需要专注于情商的培养,人际关系的经营,因为你工作中,是免不了要跟同事,老板等进行各种各样的交流的。


0 0