0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

高通与苹果决裂 谁是最后的赢家

西西 作者:工程师飞燕 2018-11-05 10:22 次阅读

作为全球知名芯片供应厂商高通的芯片一直以来都被市场认可,尤其是中国的手机厂商更是把能够获得高通的手法芯片为荣。然而高通也有头疼事情,近几年与苹果的关系日益恶化,最终造成目前的决裂。

2018年1月底,欧盟委员会宣布对高通公司罚款9.97亿欧元(约合12.29亿美元),原因为高通滥用其市场主导地位,通过向苹果公司付费的形式来换取苹果在其智能手机和平板电脑中独家使用高通的芯片。在韩国市场,高通则被罚款1.03万亿韩元(约合9.02亿美元)。

截至2018年6月中旬,苹果和高通在全球打了50多场专利官司。这些官司分布于6个不同国家的16个司法管辖区。

高通与苹果决裂 英特尔迎来好机会

同行是冤家,同行的帮手也是冤家。高通不做手机,但是他的芯片确实无数手机厂商最爱的东西,而他的芯片也成为那些安卓手机厂商打击苹果的利器。高通同时还在做手机的基带,这是一款手机信号优劣的关键,此前苹果虽然不适用高通的CPU芯片,但是却使用高通的基带。但是现在苹果却决定彻底和高通决裂,不再使用其提供的基带,转而和因特尔展开合作。

英特尔的CPU制作技术很强,作为全球最大的PC电脑芯片供应商,英特尔的芯片处理器占据这个市场的绝大部分份额。同时这家公司也提供基带产品,但是因为本身的技术实力不太好,此前很少有公司会选择英特尔的产品,但是现在苹果和高通破裂之后,英特尔就成为苹果为数不多的几个可以选择合作的厂商。

彻底弃用高通基带后,苹果将iPhone的“去高通化”作为对高通诉讼的回应,这似乎预示着两家公司的关系已经无法修复,至少在商业上,苹果和高通已然分道扬镳。

2020年的5G苹果确定英特尔为唯一供货商

目前,英特尔已经有能力推出包括支持CDMA2000规格在内的符合苹果性能标准的基带芯片,加上相比高通,英特尔方面还存在更具竞争力的零部件定价优势,所以,英特尔完全有可能挤掉高通,成为苹果iPhone在2018年的唯一基带供应商。

消息人士说,iPhone制造商的工程师们一直在与英特尔的同行合作,对即将推出的下一代无线宽带技术5G进行早期研发,同时,与主要的调制解调器供应商高通公司之间的对话则大为减少。

英特尔在调制解调器市场上远远落后于高通,但有一小部分人员正在研发5G,大约有“数千人”。眼下对英特尔来说,为iPhone提供5G调制解调器的业务“势在必得”。

不只是现在的iPhone XS Max手机,未来即将在2020年发布的5G手机,也会采用英特尔的基带产品,未来苹果的5G产品将仍旧选择英特尔基带产品,两家公司未来将会展开深度的合作。

为什么会选英特尔?

苹果在新 iPhone 上全面选用英特尔而不是合作多年的高通,网传有苹果为了节省成本、高通和苹果合作不愉快等解释,但归根到底,主要原因还是高通去年对苹果的指控。

在高通去年 11 月提交的文件里,他们表示苹果此前与高通合作期间,通过高通提供的技术去改进英特尔的调制解调芯片(基带),从而帮助作为高通竞争对手的英特尔解决‘性能欠佳’的问题。

不过从今年苹果押注英特尔并敢于叫板高通的大环境看,我们不难能观察到几个信息

第一是英特尔开出了一个相对优惠的价格,让苹果大批量装备新手机;其次是英特尔的基带技术已经成熟,并得到了苹果认可,未来或将会继续大批量采购;如果英特尔能担当苹果的长期后盾,高通和苹果的纷争不会在短期内和解。

对于高通的指控,苹果发言人 Ars 在北京时间 9 月 27 日作出回应,称高通作出的指控均无实质证据。所以可以猜想的是,如果高通和苹果的纷争持续到 2019 年甚至更久,那么明年或未来的 iPhone 也将可能会继续采用英特尔供应的基带了。

但是前提也是英特尔能够解决资金的信号差和不稳定的问题,最起码不能再让下一代5G手机出现XS Max的问题。否则到时候苹果很可能就会选择联发科作为自己的供货商,到那时候iPhone手机或许就会更尴尬。

虽然我们不知道苹果与高通的战争将会如何结束,但仅以当前造成的影响来看,不管是高通以专利大旗击败苹果取得胜利,还是苹果以广大的用户基数斗赢高通,最终都只能是伤敌一千自损八百,激烈的碰撞中,永远不会有真正胜利的一方。而在这个故事中,也似乎只有坐收渔翁之利的英特尔能真正笑得出来。

对于高通而言,失去苹果这个大客户可能自己的产品销量会下滑,但是却也不至于影响高通的真正的市场份额,毕竟人家主要客户可是小米等手机厂商。尤其是小米,早早的就宣布自己要和高通共同布局5G市场,这才是高通的真正的大客户啊!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 高通
    +关注

    关注

    76

    文章

    7147

    浏览量

    187799
  • 英特尔
    +关注

    关注

    60

    文章

    9398

    浏览量

    168654
  • 苹果
    +关注

    关注

    61

    文章

    23651

    浏览量

    191548
收藏 人收藏

    评论

    相关推荐

    苹果发展历程#苹果

    苹果行业资讯
    jf_53293418
    发布于 :2024年03月22日 18:03:59

    苹果叫停智Micro LED项目,产业商用前景或受影响

    近日,科技巨头苹果决定暂停其Micro LED智能手表项目的开发,此举引发了业界的广泛关注。与此同时,其主要供应商ams OSRAM也调整了其Micro LED战略,暗示着这一项目的取消
    的头像 发表于 03-12 18:32 962次阅读

    线路板行业的上下游竞争格局:谁是行业的领导者和后来者?

    线路板行业的上下游竞争格局:谁是行业的领导者和后来者?
    的头像 发表于 03-01 10:54 271次阅读

    苹果自动驾驶汽车计划有变 L4级转向L2+级别技术

    苹果在汽车研发领域已经投入了近10年的时间,目前正处于决定项目成败的关键阶段。虽然最初的目标是打造一款真正无人驾驶的汽车,但经过深思熟虑,苹果决定先将一款功能更为有限的电动汽车推向市场。
    的头像 发表于 01-24 16:19 217次阅读

    苹果降低OLED面板订单量!LGD丢了200万片订单

    WitDisplay消息,由于苹果决定降低下一代iPad Pro机型中安装的有机发光二极管(OLED)面板的订单量,预计韩国显示器企业的供货量将小于预期。
    的头像 发表于 01-24 11:36 695次阅读

    苹果决定推迟AirTag 2发布至明年完成库存清理

    近日,美国科技巨头苹果的一份内部报告揭示出其新款AirTag 2追踪装置的最新动态。据报告称,该产品原本的发行计划定在2024年,但现在已经推迟到了下一年即2025年。这一消息由知名科技分析师马克·古尔曼(Mark Gurman)在他最近的Power On时事通讯中公布。
    的头像 发表于 01-09 09:33 215次阅读

    2023注定不凡,2024再启新程,一定要看到最后... #芯科技 #红外热成像 #红外机芯

    红外热成像芯科技
    高芯科技
    发布于 :2023年12月30日 14:19:43

    苹果决定停止自主研发5G调制解调芯片

    11月30日消息,据来自韩国的未经证实的消息称,苹果公司在多次尝试完善自研 5G 调制解调器芯片失败后,决定停止开发该芯片。
    的头像 发表于 11-30 09:29 413次阅读

    #通 #英特尔 #Elite 通X Elite芯片或终结苹果、英特尔的芯片王朝

    英特尔苹果
    深圳市浮思特科技有限公司
    发布于 :2023年10月27日 16:46:07

    刚刚,郭明錤发文盛赞,这家全球第一生物识别传感器龙头成国产替代赢家!被华为带飞!

    电子行业内幕消息,其中尤以披露苹果产业链信息知名。郭明錤认为这家传感器企业为何成为国产替代赢家?在华为供应链中扮演什么角色?详情见下文。     郭明錤罕见发文盛赞!为什么这家传感器企业成国产替代赢家?取代AMS、NXP、高通!
    的头像 发表于 10-23 15:54 474次阅读
    刚刚,郭明錤发文盛赞,这家全球第一生物识别传感器龙头成国产替代<b class='flag-5'>赢家</b>!被华为带飞!

    苹果供应链变革 “果链”大步外迁 谁是受益方?

    近年来,苹果公司(Apple)每年都公布iPhone、Mac笔电及其他设备的零组件供应商,截至2022年,列入名单的供应商已达188家。中国一直是苹果最重要的核心供应商,但随着中美关系紧张,苹果
    的头像 发表于 09-18 19:15 967次阅读

    通病,苹果7无服务

    苹果
    学习电子知识
    发布于 :2023年07月17日 00:09:59

    苹果iPhone se手机改18650电池#换电池

    苹果
    白加黑
    发布于 :2023年06月18日 23:07:00

    苹果MR Vision Pro将会带动哪些零部件出货?

    苹果如何重新定义AR? 在如今以智能手机为主的消费电子市场下行阶段,市场急需开辟一个新的领域带来新的增长点,以往被寄予厚望的VR/AR等头显设备在经历了数年发展后,依旧难堪大任,业界都把希望寄托在
    发表于 06-08 10:19

    Nodemcu 0.9对比arduino Nano for Neopixel谁是赢家

    大家好, 为了准备在家里制作真正的运动感应楼梯灯,我制作了一个原型。我正在决定是使用 arduino Nano(或任何其他 arduino)还是 Esp 来驱动 LED。偏好 Esp 8266。 然而,实验证明 Nano 更好,但理论上我知道 Esp 更强大,内存更大。 Nodemcu 0.9 有延迟(请注意视频中 22 秒的延迟)。 是什么导致了这种滞后? Nano 表现不错,尽管它有更多的像素可能会耗尽内存(对于实际步骤)。 你们觉得怎么样? 代码:全选 // \"Bling\" up your Staircase By Simon Jowett November 2014 // Thanks to the Neopxel Library by Adafruit #include #define PIN 3 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: //NEO_KHZ800800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) //NEO_KHZ400400 KHz (classic \'v1\' (not v2) FLORA pixels, WS2811 drivers) //NEO_GRBPixels are wired for GRB bitstream (most NeoPixel products) //NEO_RGBPixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel\'s data input // and minimize distance between Arduino and first pixel.Avoid connecting // on a live circuit...if you must, connect GND first. // Set up Variables unsigned long timeOut=60000; // timestamp to remember when the PIR was triggered. int downUp = 0;// variable to rememer the direction of travel up or down the stairs int alarmPinTop = 7;// PIR at the top of the stairs int alarmValueTop = LOW; // Variable to hold the PIR status int alarmValueBottom = LOW; // Variable to hold the PIR status int ledPin = 16;// LED on the arduino board flashes when PIR activated int LDRSensor = A0;// Light dependant resistor int LDRValue = 0; // Variable to hold the LDR value int colourArray[350];// An array to hold RGB values int change = 1;// used in \'breathing\' the LED\'s int breathe = 0;// used in \'breathing\' the LED\'s void setup() { strip.begin(); strip.show(); // Initialize all pixels to \'off\' Serial.begin (115200);// only requred for debugging pinMode(ledPin, OUTPUT);// initilise the onboard pin 13 LED as an indicator pinMode(alarmPinTop, INPUT);// for PIR at top of stairs initialise the input pin and use the internal restistor delay (2000); // it takes the sensor 2 seconds to scan the area around it before it can //detect infrared presence. for (int i=0 ;i < 350; i++){ // initilise the colourArray to zero colourArray=0; } } void loop() { LDRValue = analogRead(LDRSensor); Serial.println(LDRValue); if (timeOut+57000 < millis()) {// idle state - \'breathe\' the top and bottom LED to show program is looping breathe = breathe + change; strip.setPixelColor(0,0,0,breathe); strip.setPixelColor(1,0,0,breathe); strip.setPixelColor(6,0,0,breathe); strip.setPixelColor(7,0,0,breathe); strip.setPixelColor(8,0,0,breathe); strip.setPixelColor(9,0,0,breathe); strip.setPixelColor(14,0,0,breathe); strip.setPixelColor(15,0,0,breathe); strip.setPixelColor(16,0,0,breathe); strip.setPixelColor(17,0,0,breathe); strip.setPixelColor(22,0,0,breathe); strip.setPixelColor(23,0,0,breathe); strip.show(); if (breathe == 100 || breathe == 0) change = -change;// breathe the LED from 0 = off to 100 = fairly bright if (breathe == 100 || breathe == 0) delay (300);// Pause at beginning and end of each breath delay(25); } {// only switch on LED\'s at night when LDR senses low light conditions - you may have to change the number for your circumstances! alarmValueTop = digitalRead(alarmPinTop);// Constantly poll the PIR at the top of the stairs if (alarmValueTop == HIGH && downUp != 2){// the 2nd term allows timeOut to be contantly reset if one lingers at the top of the stairs before decending but will not allow the bottom PIR to reset timeOut as you decend past it. timeOut=millis();// Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 1; topdown();// lights up the strip from top down } if (alarmValueBottom == HIGH && downUp != 1){ // the 2nd term allows timeOut to be contantly reset if one lingers at the bottom of the stairs before decending but will not allow the top PIR to reset timeOut as you decend past it. timeOut=millis(); // Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 2; bottomup();// lights up the strip from bottom up } if (timeOut+10000 < millis() && timeOut+15000 < millis()) { //switch off LED\'s in the direction of travel. if (downUp == 1) { colourWipeDown(strip.Color(0, 0, 0), 50); // Off } if (downUp == 2){ colourWipeUp(strip.Color(0, 0, 0), 50);// Off } downUp = 0; //for (int i=0 ;i < 350; i++){ // Depending on your preference you may want to include this loop to clear out the colourArray // colourArray=0; // } } if (timeOut+15000 < millis() && timeOut+54999 > millis()) waterfall(); // Waterfall effect to play between these times after a PIR trigger. if (timeOut+55000 < millis() && timeOut+56999 > millis()) fade();// Fade/switch off LED\'s } } void topdown() { Serial.println (\"detected top\"); // Helpful debug message colourWipeDown(strip.Color(50, 50, 30), 40); // Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } void bottomup() { Serial.println (\"detected bottom\"); // Helpful debug message colourWipeUp(strip.Color(50, 50, 30), 40);// Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } // Fill the dots one after the other with a color void colourWipeDown(uint32_t c, uint8_t wait) { for(uint16_t i=0; i-1; i--) {// Shift the RGB colours down in the colourArray[] colourArray[i+3]=colourArray; } colourArray[0] = random(0,20);// Genearate the red component of the 1st LED at the top of the stairs colourArray[1] = random(0,40);// Genearate the green component of the 1st LED at the top of the stairs colourArray[2] = random(10,70); // Genearate the blue component of the 1st LED at the top of the stairs for (int k=0; k<351; k=k+3){ // Set and send the colours to the strip uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show();// and display the result delay(35);// delay to simulate running water } // Play the LED fade out void fade(){ for (int j = 0; j <70; j++) { for(int i=350; i>-1; i--) { colourArray=colourArray-1;// reduce intensity of light by 1 if (colourArray <= 0 ) colourArray = 0; } for (int k=0; k<351; k=k+3){ uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show(); delay(60); } breathe = 0; change = 1; } 代码:全选 // \"Bling\" up your Staircase By Simon Jowett November 2014 // Thanks to the Neopxel Library by Adafruit #include #define PIN 4 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: //NEO_KHZ800800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) //NEO_KHZ400400 KHz (classic \'v1\' (not v2) FLORA pixels, WS2811 drivers) //NEO_GRBPixels are wired for GRB bitstream (most NeoPixel products) //NEO_RGBPixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel\'s data input // and minimize distance between Arduino and first pixel.Avoid connecting // on a live circuit...if you must, connect GND first. // Set up Variables unsigned long timeOut=60000; // timestamp to remember when the PIR was triggered. int downUp = 0;// variable to rememer the direction of travel up or down the stairs int alarmPinTop = 5;// PIR at the top of the stairs int alarmValueTop = LOW; // Variable to hold the PIR status int alarmValueBottom = LOW; // Variable to hold the PIR status int ledPin = 16;// LED on the arduino board flashes when PIR activated int LDRSensor = A0;// Light dependant resistor int LDRValue = 0; // Variable to hold the LDR value int colourArray[350];// An array to hold RGB values int change = 1;// used in \'breathing\' the LED\'s int breathe = 0;// used in \'breathing\' the LED\'s void setup() { strip.begin(); strip.show(); // Initialize all pixels to \'off\' Serial.begin (115200);// only requred for debugging pinMode(ledPin, OUTPUT);// initilise the onboard pin 13 LED as an indicator pinMode(alarmPinTop, INPUT);// for PIR at top of stairs initialise the input pin and use the internal restistor delay (2000); // it takes the sensor 2 seconds to scan the area around it before it can //detect infrared presence. for (int i=0 ;i < 350; i++){ // initilise the colourArray to zero colourArray=0; } } void loop() { LDRValue = analogRead(LDRSensor); Serial.println(LDRValue); if (timeOut+57000 < millis()) {// idle state - \'breathe\' the top and bottom LED to show program is looping breathe = breathe + change; strip.setPixelColor(0,0,0,breathe); strip.setPixelColor(1,0,0,breathe); strip.setPixelColor(6,0,0,breathe); strip.setPixelColor(7,0,0,breathe); strip.setPixelColor(8,0,0,breathe); strip.setPixelColor(9,0,0,breathe); strip.setPixelColor(14,0,0,breathe); strip.setPixelColor(15,0,0,breathe); strip.setPixelColor(16,0,0,breathe); strip.setPixelColor(17,0,0,breathe); strip.setPixelColor(22,0,0,breathe); strip.setPixelColor(23,0,0,breathe); strip.show(); if (breathe == 100 || breathe == 0) change = -change;// breathe the LED from 0 = off to 100 = fairly bright if (breathe == 100 || breathe == 0) delay (300);// Pause at beginning and end of each breath delay(25); } {// only switch on LED\'s at night when LDR senses low light conditions - you may have to change the number for your circumstances! alarmValueTop = digitalRead(alarmPinTop);// Constantly poll the PIR at the top of the stairs if (alarmValueTop == HIGH && downUp != 2){// the 2nd term allows timeOut to be contantly reset if one lingers at the top of the stairs before decending but will not allow the bottom PIR to reset timeOut as you decend past it. timeOut=millis();// Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 1; topdown();// lights up the strip from top down } if (alarmValueBottom == HIGH && downUp != 1){ // the 2nd term allows timeOut to be contantly reset if one lingers at the bottom of the stairs before decending but will not allow the top PIR to reset timeOut as you decend past it. timeOut=millis(); // Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 2; bottomup();// lights up the strip from bottom up } if (timeOut+10000 < millis() && timeOut+15000 < millis()) { //switch off LED\'s in the direction of travel. if (downUp == 1) { colourWipeDown(strip.Color(0, 0, 0), 50); // Off } if (downUp == 2){ colourWipeUp(strip.Color(0, 0, 0), 50);// Off } downUp = 0; //for (int i=0 ;i < 350; i++){ // Depending on your preference you may want to include this loop to clear out the colourArray // colourArray=0; // } } if (timeOut+15000 < millis() && timeOut+54999 > millis()) waterfall(); // Waterfall effect to play between these times after a PIR trigger. if (timeOut+55000 < millis() && timeOut+56999 > millis()) fade();// Fade/switch off LED\'s } } void topdown() { Serial.println (\"detected top\"); // Helpful debug message colourWipeDown(strip.Color(50, 50, 30), 40); // Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } void bottomup() { Serial.println (\"detected bottom\"); // Helpful debug message colourWipeUp(strip.Color(50, 50, 30), 40);// Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } // Fill the dots one after the other with a color void colourWipeDown(uint32_t c, uint8_t wait) { for(uint16_t i=0; i-1; i--) {// Shift the RGB colours down in the colourArray[] colourArray[i+3]=colourArray; } colourArray[0] = random(0,20);// Genearate the red component of the 1st LED at the top of the stairs colourArray[1] = random(0,40);// Genearate the green component of the 1st LED at the top of the stairs colourArray[2] = random(10,70); // Genearate the blue component of the 1st LED at the top of the stairs for (int k=0; k<351; k=k+3){ // Set and send the colours to the strip uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show();// and display the result delay(35);// delay to simulate running water } // Play the LED fade out void fade(){ for (int j = 0; j <70; j++) { for(int i=350; i>-1; i--) { colourArray=colourArray-1;// reduce intensity of light by 1 if (colourArray <= 0 ) colourArray = 0; } for (int k=0; k<351; k=k+3){ uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show(); delay(60); } breathe = 0; change = 1; }
    发表于 05-23 07:13