《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于C8051F的SMBus串行通信的原理和實現
基于C8051F的SMBus串行通信的原理和實現
來源:電子技術應用2010年第5期
張媛媛 徐雪松 何怡剛
長沙湖南大學電氣與信息工程學院(410082)
摘要: 在介紹C8051F串行通信總線SMBus的特點及功能的基礎上,重點介紹了其協議、總線仲裁、寄存器以及C8051F02x與多個EEPROM串行通信的實現,并給出了部分應用程序。
Abstract:
Key words :

摘 要: 在介紹C8051F串行通信總線SMBus的特點及功能的基礎上,重點介紹了其協議、總線仲裁、寄存器以及C8051F02x與多個EEPROM串行通信的實現,并給出了部分應用程序。
關鍵詞: C8051F單片機  片上系統  SMBus總線  總線仲裁

  由于MCU具有小巧靈活、價格低廉的特點,所以在控制系統、嵌入式系統等領域中得到廣泛應用。這些應用中,數據傳輸總線的選擇是重要的環節。并口傳輸速度雖快,但是實現時需要較多的I/O口,而許多應用系統的設計又必須兼顧低成本、高可靠性、高效率三方面,所以經常要求在一個或幾個單片機和若干外圍器件之間傳送短的數據。目前,大部分C8051F單片機中都集成了SMBus(System Management Bus)總線,主要是希望通過一條廉價并且功能強大的總線(由二條線組成)控制主板上的設備并收集相應的信息。使用 SMBus 的系統中,設備之間發送和接收消息都是通過 SMBus,而不是使用單獨的控制線,這樣可以節省設備的管腳數。SMBus的數據傳輸率比較低,可允許單一主機與多個從設備同時收發數據。
1  系統管理總線SMBus
  SMBus是1995年由Intel提出的一種雙線通信專利技術,它完全符合系統管理總線規范1.1版,與I2C串行總線兼容。系統控制器對總線的讀寫操作都是以字節為單位,由SMBus接口自動控制數據的串行傳輸。SMBus可以工作在主方式和(或)從方式,一個總線上可以有多個主器件。SMBus提供SDA(串行數據)控制、SCL(串行時鐘)產生和同步、仲裁邏輯以及起始/停止的控制和產生電路。有三個與之相關的特殊功能寄存器:配置寄存器SMB0CF、控制寄存器SMB0CN及用于發送和接收數據的數據寄存器SMB0DAT。
1.1 SMBus協議
  SMBus有二種可能的數據傳輸類型:從主發送器到所尋址的從接收器(寫)和從被尋址的從發送器到主接收器(讀)。這二種數據傳輸都由主器件啟動,主器件還提供串行時鐘。SMBus接口可以工作在主方式或從方式??偩€上可以有多個主器件,如果二個或多個主器件同時啟動數據傳輸,則仲裁機制保證有一個主器件會贏得總線。
  一次典型的SMBus數據傳輸包括一個起始條件(Start)、一個地址字節(位7~1:7位從地址;位0:R/W方向位)、一個或多個字節的數據和一個停止條件(Stop)。方向位占據地址字節的最低位,當被設置為邏輯1時表示這是一個“讀”(READ)操作,為邏輯0時表示這是一個“寫”(WRITE)操作。
  所有的數據傳輸都由主器件啟動,可以尋址一個或多個目標從器件。主器件產生一個起始條件,然后發送地址和方向位。如果本次數據傳輸是一個從主器件到從器件的寫操作,則主器件每發送一個數據字節后等待來自從器件的確認。如果是一個讀操作,則由從器件發送數據并等待主器件的確認。在數據傳輸結束時,主器件產生一個停止條件,結束數據交換并釋放總線。
1.2 總線仲裁
  一個主器件只能在總線空閑時啟動一次傳輸。在一個停止條件之后或SCL和SDA保持高電平已經超過了指定時間時,總線是空閑的。二個或多個主器件可能在同一時刻產生起始條件。由于產生起始條件的器件并不知道其他器件也正想占用總線,所以使用仲裁機制迫使一個主器件放棄總線。這些主器件繼續發送起始條件,直到其中一個主器件發送高電平,而其他主器件在SDA上發送低電平。贏得總線的器件繼續其數據傳輸過程,而未贏得總線的器件成為從器件。該仲裁機制是非破壞性的,因為總會有一個器件贏得總線,不會發生數據丟失。
1.3 SMBus數據傳輸方式
  SMBus接口可以被配置為工作在主方式和(或)從方式。在某一時刻,它將工作在下述四種方式之一:主發送器、主接收器、從發送器或從接收器。在本文的應用舉例中,SMBus工作在主發送器和主接收器模式下。下面以中斷驅動的SMBus0應用為例來重點說明這二種工作方式。當然SMBus0也可以工作在查詢方式。
  (1)主發送器方式
  在SDA上發送串行數據,在SCL上輸出串行時鐘。SMBus0接口首先產生一個起始條件,然后發送含有目標從器件地址和數據方向位的第一個字節。在這種情況下數據方向位(R/W)為邏輯0,表示這是一個“寫”操作。SMBus0接口發送一個或多個字節的串行數據,并在每發送完一個字節后等待由從器件產生的確認信號(ACK)。最后,為了指示串行傳輸的結束,SMBus0產生一個停止條件。
  (2)主接收器方式
  在SDA上接收串行數據,在SCL上輸出串行時鐘。SMBus0接口首先產生一個起始條件,然后發送含有目標從器件地址和數據方向位的第一個字節。在這種情況下數據方向位(R/W)應為邏輯1,表示這是一個“讀”操作。SMBus0接口接收來自從器件的串行數據并在SCL輸出串行時鐘。每收到一個字節后,SMBus0接口根據寄存器SMB0CN中AA位的狀態產一個ACK或NACK。最后,為了指示串行傳輸的結束,SMBus0產生一個停止條件。
1.4 SMBus特殊功能寄存器
  對SMBus串行接口的訪問和控制是通過5個特殊功能寄存器來實現的:控制寄存器SMB0CN、時鐘速率寄存器SMB0CR、地址寄存器SMB0ADR、數據寄存器SMB0DAT和狀態寄存器SMB0STA。SMB0DAT將保存要發送或剛接收的串行數據字節;SMB0CR時鐘速率寄存器用于控制主方式下串行時鐘SCL的頻率;SMB0ADR保存SMBus0接口的從地址。下面將重點介紹控制寄存器和狀態寄存器。
  (1)控制寄存器SMB0CN
SMBus控制寄存器SMB0CN用于配置和控制SMBus0接口,操縱所有SMBus的狀態信息。它包括起始標志(STA)、停止標志(STO)、確認(AA)、中斷標志(SI)和超時允許等。該寄存器中的所有位都可以用軟件讀或寫,有二個控制位SI和STO受SMBus0硬件的影響。圖1為SMBus控制寄存器圖。

  (2)狀態寄存器SMB0STA
  狀態寄存器SMB0STA保存一個8位的狀態碼,用于指示SMBus0接口的當前狀態,共有28個可能的SMBus0狀態,每個狀態有一個惟一的狀態碼與之對應。狀態碼的高5位是可變的,而一個有效狀態碼的低3位固定為0(當SI=1時),因此所有有效的狀態碼都是8的整數倍,這使得在軟件中用狀態碼作為轉移到正確的中斷服務程序的索引變得很容易。在本文的應用舉例中,SMBus主要工作在主發送器、主接收器和主發送器/主接收器方式,并且在中斷服務程序中用到了這些狀態碼。
2  SMBus通信實現
  C8051F具有與8051兼容的高速CIP-51內核,與MCS-51指令集完全兼容。除了具有標準8051數字外設部件之外,片內還集成了數據采集和控制系統中常用的模擬部件和其他數字外設及功能部件,是真正的混合信號片上系統。所以,該例中用C8051F020通過SMBus與三個16位地址空間的8KB字節E2PROM進行通信傳輸。它們之間由SCL和SDA連接起來。多個E2PROM的通信配置如圖2所示。將C8051F020設置為主發送器,chip_A、chip_B、chip_C設置為從接收設備。有A0~A2三個地址選擇管腳用來設置E2PROM的地址。高四位統一設置為‘0101’,低四位分別是000.001.010。所以從設備的地址是:chip_A=1010000,chip_B=1010001,chip_C=1010010。

  由于E2PROM有二個字節的地址空間,這意味著在READ和WRITE操作過程中要多傳送一個字節的地址(如圖3所示)。當中斷服務程序收到“數據已傳輸,接收到ACK”的狀態信號時,它必須知道已傳送的是高地址字節、低地址字節還是數據字節。程序中,BYTE_NUMBER變量將保存該信息。

  下面的程序為SMBus寫函數SM_Send,它一次將一字節寫入指定的E2PROM中;SMBus讀函數SM_Receive,它將從指定的E2PROM中讀出一字節信息;最后,給出了中斷服務程序。
//SMBus寫函數
//chip_select為被寫的設備E2PROM的地址
//byte_address為被讀的存儲單元的地址
//out_byte為要寫入存儲單元的數據
void SM_Send(char chip_select,unsigned int byte_address,
char out_byte)
{
while(SM_BUSY);  //等待SmBus空閑
SM_BUSY=1;    //占用SMBus總線
SMB0CN=0x44;     //使能SMBus,在應答周期內返回確認
BYTE_NUMBER=2;                              //地址為二字節
COMMAND=(chip_select | WRITE);  //Chip select+ WRITE
HIGH_ADD=((byte_address >> 8) & 0xFF); //高八位地址
LOW_ADD=(byte_address & 0xFF);  //低八位地址
WORD=out_byte;//寫數據
STO=0;     //發送一個停止條件
STA=1;     //開始傳輸數據
}
//SMBus讀函數
//chip_select為被讀設備E2PROM的地址
//byte_address為被讀存儲單元的地址
char SM_Receive(char chip_select,unsigned int byte_address)
{
while(SM_BUSY);  //等待總線空閑;
SM_BUSY=1;   //占用SMBus;
SMB0CN=0x44;  //使能enabled,在應答周期內返回確認
BYTE_NUMBER=2;
COMMAND=(chip_select | READ);//Chip select+ READ
HIGH_ADD=((byte_address >> 8) & 0xFF);
LOW_ADD=(byte_address & 0xFF);
STO=0;
STA=1;
while(SM_BUSY);   //等待傳輸完畢
return WORD;
}
          //SMBus中斷服務程序
void SMBUS_ISR (void) interrupt 7
{
  switch(SMB0STA){  //SMBus的狀態碼(SMB0STA寄存器)
     case SMB_START:  //SMB_START=0x08
        SMB0DAT=(COMMAND & 0xFE);//將從地址+R/W
                   //裝入到SMB0DAT
     STA=0;                                //STA清‘0’
      break
        case SMB_RP_START:  //SMB_RP_START=0x10
     SMB0DAT=COMMAND;  //將從地址+R裝入
                                                            //到SMB0DAT
     STA=0;
      break;
        case SMB_MTADDACK:  //SMB_MTADDACK=0x18
     SMB0DAT=HIGH_ADD;  //將高地址裝入SMB0DAT
     break;
     case SMB_MTADDNACK:   //SMB_MTADDNACK=0x20
     STO=1;    //確認查詢重試
     STA=1;
     break;
     case SMB_MTDBACK:  //SMB_MTDBACK=0x28
     switch (BYTE_NUMBER){
   case 2:        //如果BYTE_NUMBER=2,僅高地址已發送
    SMB0DAT=LOW_ADD;
    BYTE_NUMBER--;
       break;
      case 1:       //如果BYTE_NUMBER=1,LOW_ADD已發送
      if(COMMAND & 0x01){  //如果R/W=READ,
               //重復發送START
           STO=0;
           STA=1;
      } else {
           SMB0DAT=WORD;  //如果R/W=WRITE,
           //準備發送數據字節
           BYTE_NUMBER--;
        }
        break;
     default:     //如果BYTE_NUMBER=0,傳輸結束
     STO=1;
     SM_BUSY=0;  //釋放SMBus
     }
     break;
case SMB_MTDBNACK://SMB_MTDBNACK=0x30
     STO=1;    //重試傳輸,置為STO
     STA=1;
     break;
case SMB_MTARBLOST://SMB_MTARBLOST=0x38
     STO=1;    //重試傳輸
     STA=1;
     break;
case SMB_MRADDACK://SMB_MRADDACK=0x40
     AA=0;   //清AA,等待接收數據
     break;
case SMB_MRADDNACK://SMB_MRADDNACK=0x48
     STO=0;   //確認查詢重試
     STA=1;
     break;

case SMB_MRDBACK: //SMB_MRDBACK=0x50
     STO=1;
     SM_BUSY=0;
     break;
     case SMB_MRDBNACK://SMB_MRDBNACK=0x58
     WORD=SMB0DAT;
     STO=1;
     SM_BUSY=0;  //釋放SMBus
     break;

default:
     STO=1;     //重新安排通訊
     SM_BUSY=0;
     break;
}
SI=0;                                       //清中斷標志
}
3  結束語
  SMBus具有可靠性高以及接線方便的特點,而且具有SMBus總線接口的外圍芯片也很多,所以應用起來非常方便。在本文應用舉例中,實現了二個以上的多設備通信。但需要注意的是:在主發送、接收方式下,一旦SMBus檢測到仲裁丟失,會立即釋放SDA和SCL線。以后如未檢測到停止條件,可能會引起死循環。為此,應使用軟件超時來控制這種情況,以保證系統能夠退出。
參考文獻
1   CygnalC8051Fxxx數據手冊.www.xhl.com.cn,2002,12
2   郝冬妮,孫立春,李晶皎.基于MCU的I2C總線傳輸設計. 單片機與嵌入式系統,2003;(6)
3   潘琢金.C8051F高速SOC單片機原理及應用.北京:北京航空航天大學出版社,2000
 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲精品一二| 欧美理论在线播放| 免费人成精品欧美精品| 日韩视频在线一区二区三区| 欧美日韩免费高清| 国产欧美视频一区二区| 欧美日韩国产亚洲一区| 欧美午夜精品久久久久久孕妇| 欧美色视频在线| 欧美伦理视频网站| 亚洲精品乱码久久久久久蜜桃麻豆| 国产日韩一区在线| 国产精品一区视频| 欧美三级电影一区| 亚洲精品影视| 在线观看av不卡| 亚洲女同同性videoxma| 欧美成人精品高清在线播放| 91久久久在线| 国产精品美女久久久久aⅴ国产馆| 欧美大片在线看| 欧美视频在线一区二区三区| 香港成人在线视频| 国内精品视频在线观看| 欧美日韩一区在线| 国产乱码精品一区二区三区五月婷| 欧美一级专区| 久久久久国产精品人| 欧美激情91| 欧美激情第10页| 日韩一级黄色大片| 亚洲综合二区| 国产精品久久久久国产精品日日| 欧美一级视频免费在线观看| 一本在线高清不卡dvd| 国产精品视频在线观看| 国产精品一区免费视频| 久久久亚洲一区| 欧美精品在线视频| 麻豆成人在线观看| 一区二区三区中文在线观看| 亚洲欧美日韩第一区| 国内精品模特av私拍在线观看| 欧美日韩在线看| 亚洲在线中文字幕| 欧美人与性动交a欧美精品| 午夜精品久久久久久久99樱桃| 国模大胆一区二区三区| 在线观看一区| 国产欧美日韩一区二区三区| 一区二区在线看| 亚洲一二三区视频在线观看| 欧美成人亚洲成人日韩成人| 国产精品乱码人人做人人爱| 亚洲高清123| 久久精品人人做人人爽电影蜜月| 一本色道久久综合狠狠躁篇的优点| 在线亚洲高清视频| 国产精品美女久久久久久久| 欧美日韩专区在线| 欧美日本久久| 亚洲毛片一区二区| 欧美日韩亚洲不卡| 欧美二区在线| 国产欧美日韩另类一区| 亚洲欧美日韩天堂一区二区| 在线午夜精品自拍| 欧美日韩精品欧美日韩精品| 性欧美暴力猛交另类hd| 可以看av的网站久久看| 一区二区三区在线高清| 亚洲电影网站| 99成人精品| 欧美日韩xxxxx| 激情综合网址| 欧美性色综合| 国产精品热久久久久夜色精品三区| 国产一区二区三区奇米久涩| 国内精品免费在线观看| 亚洲自拍另类| 国产欧美一区二区精品仙草咪| 性欧美办公室18xxxxhd| 麻豆视频一区二区| 老牛嫩草一区二区三区日本| 激情综合网激情| 国产精品无码专区在线观看| 欧美激情亚洲精品| 欧美在线免费观看| 欧美日韩一区二区三区在线观看免| 嫩草成人www欧美| 欧美亚洲尤物久久| 在线日韩精品视频| 亚洲精品护士| 久久福利资源站| 欧美成人资源| 亚洲免费观看在线视频| 国产精品久久久久久久久久三级| 亚洲欧美激情四射在线日| 亚洲第一免费播放区| 欧美人妖另类| 久久精品色图| 亚洲香蕉伊综合在人在线视看| 国产模特精品视频久久久久| 亚洲另类自拍| 国产精品日韩欧美一区二区三区| 久久精品欧洲| 韩国欧美国产1区| 国产欧美日本一区二区三区| 亚洲影院免费观看| 欧美激情第10页| 一区二区亚洲精品| 久久av一区二区| 免费高清在线一区| 久久综合久色欧美综合狠狠| 精品成人一区| 午夜精品区一区二区三| 欧美日本亚洲| 欧美一区二区久久久| 久久美女艺术照精彩视频福利播放| 亚洲二区免费| 9i看片成人免费高清| 亚洲人精品午夜| 亚洲视频在线观看视频| 日韩视频欧美视频| 韩日视频一区| 欧美一区二区三区久久精品茉莉花| 欧美日韩精品免费观看视频完整| 亚洲精品国产精品国产自| 99国产欧美久久久精品| 伊人成人网在线看| 激情综合久久| 黄色成人av网| 欧美视频官网| 这里只有精品电影| 久久精品免费播放| 亚洲私人黄色宅男| 亚洲精品久久久久久下一站| 欧美日韩国产黄| 国产午夜久久| 国产一区二区三区免费不卡| 国产精品一区久久久| 亚洲综合久久久久| 国产精品日韩久久久| 欧美日韩在线亚洲一区蜜芽| 黄色成人av网站| 国产欧美日韩综合精品二区| 亚洲精品美女在线观看| 亚洲激情视频网站| 欧美男人的天堂| 欧美韩国日本一区| 性欧美精品高清| 欧美激情精品久久久久久变态| 欧美精品久久久久久久久老牛影院| 99国产精品一区| 久久综合久久88| 在线播放国产一区中文字幕剧情欧美| 国产女同一区二区| 欧美影院精品一区| 欧美视频二区36p| 一本色道精品久久一区二区三区| 国产小视频国产精品| 99re亚洲国产精品| 午夜精品久久久久久久99热浪潮| 国产欧美日韩专区发布| 欧美成人免费小视频| 亚洲精品久久久久久一区二区| 欧美专区在线| 国产精品视屏| 亚洲欧美另类综合偷拍| 亚洲国产天堂久久国产91| 亚洲一级二级在线| 日韩一区二区精品| 国产视频丨精品|在线观看| 亚洲精品午夜精品| 国产日韩欧美精品一区| 狂野欧美激情性xxxx欧美| 亚洲特级毛片| 欧美视频在线不卡| 欧美日韩不卡一区| 精品成人一区| 欧美亚州在线观看| 国产一区二区三区直播精品电影| 欧美性事在线| 国产精品毛片在线看| 亚洲欧美日韩在线综合| 狠狠88综合久久久久综合网| 欧美不卡一卡二卡免费版| 国模私拍视频一区| 欧美区一区二区三区| 亚洲电影一级黄| 国产精品porn| 欧美另类视频在线| 亚洲狼人综合| 精品盗摄一区二区三区| 久久精品亚洲一区二区三区浴池| 日韩视频免费观看高清在线视频| 欧美精品福利在线| 国产精品视频九色porn| 欧美电影在线免费观看网站| 午夜精品久久久久影视| 影音先锋国产精品| 亚洲欧美一区二区三区在线| 亚洲大胆视频| 国产一区美女| 亚洲精品1区2区| 欧美无乱码久久久免费午夜一区| 亚洲视频在线观看三级| 亚洲视频观看| 久久精品亚洲一区二区| 国产乱码精品一区二区三区五月婷| 午夜精品福利一区二区蜜股av| 免费成年人欧美视频| 国产精品扒开腿做爽爽爽视频| 欧美国产91| 免费在线视频一区| 欧美激情久久久久久| 一区二区三区欧美亚洲| 欧美一区二区视频免费观看| 久久夜色精品一区| 国产精品普通话对白| 欧美一区二区在线看| 久久国产精品久久w女人spa| 亚洲午夜在线观看| 中文av一区二区| 国内一区二区在线视频观看| 欧美性生交xxxxx久久久| 久久伊人精品天天| 亚洲欧美日本在线| 亚洲国产岛国毛片在线| 国产欧美一区二区白浆黑人| 亚洲精品网址在线观看| 一区二区欧美国产| 欧美日韩一区二区在线视频| 国产精品永久入口久久久| 午夜视频在线观看一区| 亚洲午夜日本在线观看| 国产精品视频网址| 一本色道久久综合亚洲精品按摩| 国产精品女同互慰在线看| 你懂的国产精品永久在线| 欧美成人免费在线| 欧美日本国产| 欧美精品一区二区视频| 国产精品成人一区二区三区吃奶| 激情五月综合色婷婷一区二区| 99精品视频免费在线观看| 一区二区国产精品| 免费成人av资源网| 亚洲精品一区二区三区av| 亚洲一区美女视频在线观看免费| 国产精品分类| 国产精品福利久久久| 午夜日韩av| 欧美成人免费一级人片100| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品成人在线| 久久久亚洲午夜电影| 国产精品成av人在线视午夜片| 国产区二精品视| 久久久久久久久综合| 国产精品天天摸av网| 久久一区二区视频| 韩国成人理伦片免费播放| 小黄鸭精品aⅴ导航网站入口| 国产真实精品久久二三区| 亚洲成人原创| 国产婷婷成人久久av免费高清| 国产一区观看| 欧美综合第一页| 久久精品盗摄| 国产日韩av一区二区| 国产在线观看精品一区二区三区| 久久激情综合网| 久久精视频免费在线久久完整在线看| 日韩一级精品视频在线观看| 亚洲第一网站免费视频| 国产麻豆9l精品三级站| 欧美视频在线观看一区| 国产精品区一区二区三区| 国产精品社区| 亚洲一区区二区| 亚洲国产综合在线看不卡| 麻豆精品一区二区av白丝在线| 欧美日韩国产欧美日美国产精品| 国产精品久久久久久久久久ktv| 亚洲在线视频观看| 欧美日韩午夜视频在线观看| 亚洲视频一起| 国产一区二区三区在线观看网站| 国产一区三区三区| 国产欧美va欧美va香蕉在| 久久久久久久一区二区| 欧美日韩一区免费| 欧美精品一区三区| 亚洲一区二区三区四区在线观看| 欧美日韩大陆在线| 狠狠色丁香婷婷综合| 性久久久久久久久久久久| 欧美三级午夜理伦三级中文幕| 久久久国产精品一区二区三区| 亚洲男女自偷自拍| 激情综合色综合久久| 国内精品久久久久影院 日本资源| 1024国产精品| 宅男噜噜噜66一区二区66| 欧美视频专区一二在线观看| 亚洲一区视频| 亚洲精品一区在线观看| 欧美精品成人在线| 在线播放精品| 久久青草福利网站| 亚洲美女视频网| 国产综合久久| 久久综合五月天婷婷伊人| 亚洲特级片在线| 亚洲视频综合| 欧美久久久久免费| 久久久97精品| 国产精品白丝av嫩草影院| 最新日韩在线视频| 国产精品欧美久久| 性欧美大战久久久久久久久| 国产精品一区久久久| 99在线精品视频在线观看| 亚洲最新合集| 99精品免费视频| 欧美人在线观看| 亚洲精品免费电影|