SPI 통신의 네트워크 계층

jabans의 이미지

STM32 코어와 메모리 간에 SPI 통신으로 데이터를 주고받는 실습을 해봤습니다.
이 때 SPI 통신은 OSI 7계층의 어디까지 해당하는지 궁금해져서 질문 올립니다.
위키백과의 데이터 링크 계층 설명을 보면 '장치 간 신호를 전달하는 물리 계층'이란 말이 있는데 코어와 메모리 사이의 신호를 전달하니까 Physical layer 같기도 하고, '네트워크 상의 주변 장치들 간 데이터를 전송한다'는 말을 보면 데이터 링크 계층처럼도 느껴집니다. 코어 기준으로 메모리는 주변장치이니까요.
여러분은 어떻게 생각하시는지 듣고 싶습니다.

아래는 위키백과 데이터 링크 계층 설명입니다.(https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EB%A7%81%ED%81%AC_%EA%B3%84%EC%B8%B5)
데이터 링크 계층(영어: data link layer)은 장치 간 신호를 전달하는 물리 계층을 이용하여 네트워크 상의 주변 장치들 간 데이터를 전송한다.
데이터 링크 계층에는 두 가지 주요 기능이 있다.
주소 할당: 물리 계층으로부터 받은 신호들이 네트워크 상의 장치에 올바르게 안착할 수 있게 한다.
오류 감지: 신호가 전달되는 동안 오류가 포함되는지를 감지한다. 오류가 감지되면 데이터 링크 계층은 해당 데이터를 폐기한다.

안녕하세요! 처음으로 질문을 올려봅니다. 제가 뭔가 실수한 게 있다면 양해 부탁드립니다. 댓글로 알려주세요^^;

라스코니의 이미지

SPI 에 대해서 잘 모르지만 physical layer는 바이너리 (binary) 데이터를 나르기만 하는 계층입니다. 진짜 나르기만 합니다. 유선 통신이라면 그냥 (transceiver) + 구리선이라고 보시면 됩니다.

link layer는 physical layer 위에 '0', '1' 바이너리 비트 스트림 (bit stream) 위에 헤더(header), 체크섬(checksum) 등을 두어 패킷을 분석/해석하고 무결성을 확인하는 정도의 단계를 수행할 수 있는 계층입니다.

jabans의 이미지

SPI 프로토콜은 소프트웨어 처리가 필요하니 Data link layer라는 생각이 드네요. 답변 감사합니다ㅎㅎ

라스코니의 이미지

좀 더 설명을 드리자면 소프트웨어는 Application layer에서 담당합니다. 사실 거의 모든 통신 프로토콜은 소프트웨어적인 처리가 필요하죠.

아래 나빌레라님이 찾은 것처럼 SPI 프로토콜은 Physical layer + Link layer만 지원하는 간단한 프로토콜로 보입니다. 나머지 쓰임새는 유저가 어떻게 활용할 것이냐에 따라 변화되겠죠.

SPI 프로토콜이 지원하는 수준 이상의 무결성 체크 방식이라든지, Ack/NACK 등의 처리, 라우팅의 처리 등등이 필요하면 그 부분은 SPI 프로토콜 보다 상위에서 유저가 추가로 개발해서 넣어야 할 것 같습니다.

예를 들어 TCP/IP over SPI 프로토콜 같은 것도 나올 수 있겠죠.

jabans의 이미지

우왕 그렇군요!!
저는 CubeMX HAL 라이브러리가 제공하는 SPI 관련 함수를 사용했는데
제가 접한 코드는 Application layer에 해당하고, 필요에 따라 다른 레이어에 관한 설정을 하는 코드를 개발해 사용할 수 있고, 실제 SPI 통신이 일어나는 건 Physical, Data link 레이어라고 생각하면 될까요?
프로토콜은 정의된 그대로 사용하는 건 줄 알았는데 필요한 만큼 응용해서 쓰는 거였군요. 더 알려주셔서 감사합니다!ㅎㅎ

나빌레라의 이미지

http://www.ijesit.com/Volume%203/Issue%204/IJESIT201404_46.pdf

구글에서 "what osi layer for SPI" 로 검색했을 때 나오는 첫 번째 링크를 눌러보니 답이 있네요.

댓글 첨부 파일: 
첨부파일 크기
Image icon Screenshot from 2020-12-18 20-14-01.png51.6 KB

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

jabans의 이미지

답변 감사합니다. 덕분에 궁금증도 해결하고 적절한 검색 키워드도 알게됐습니다ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.