Category

elliot : 린은 해커

를위한 것입니다. 자동차는 요즘 수백 마이크로 컨트롤러의 롤링 더미입니다. 그레이비드 정비공을 묻고 그는 “기화기”를 시작할 것입니다. 이러한 모든 시스템 및 하위 시스템은 전기 적대적인 환경에서 서로 이야기해야하며, 오해가 발생하거나 의사 소통 지연이 주요 결과를 가질 수 있다고 말하는 것은 과장이 아닙니다. 자동차 네트워킹은 주요 사업입니다. 자동차의 대량 생산은 비 자동차 하드웨어 해커에 대한 관련 송수신기 ICS 저비용을 다양하게 만듭니다. 그렇다면이 주목할만한 자원 기반을 활용하는 해커 프로젝트를 훨씬 더 많이 볼 수 없습니까?

자동차의 네트워크의 백본은 컨트롤러 영역 네트워크 (CAN)입니다. Hackaday의 소유자 [Eric EvenChick]는 Car-Hacker Extraordinaire이며, 멀티 파트 시리즈에서 캔 버스에 대해 알고 싶은 모든 것을 썼을 것입니다. 엔진, 브레이크, 문 및 모든 계측 데이터 리뷰 (차등) 할 수 있습니다. 그것은 빠르고 높은 신뢰성입니다. 또한 복잡하고 구현하는 데 비용이 많이 듭니다.

1990 년 후반에 수많은 생산자는 자동차 네트워크의 중요한 부분이 아닌 부위의 비평가 부위와 함께 실행중인 독점적 인 버스 프로토콜을 가지고 있습니다 : 예를 들어 문 장착 콘솔과 창 모터와 창 모터에 대한 문장이 있습니다. 그런 비경규이적이고 현지 통신으로 주요 캔 버스를 어지럽게하는 것은 가치가 없습니다. 그래서 서브 네트워크는 주요 캔에서 벗어났습니다. 이들은 주 네트워크의 속도 나 신뢰성 보장이 필요하지 않았으며 구현하기 쉽도록 비용 이유로 필요합니다. 가장 작은 마이크로 컨트롤러는 창을 위아래로 굴리기 위해 충분해야합니다.

2000 년대 초반에는 로컬 인터커넥트 네트워크 (LIN) 사양은 하나의 마스터 마이크로 컨트롤러와 소수의 노예 간의 통신을위한 낮은 구현 비용, 중간 속도, 재구성 가능성 및 예측 가능한 동작에 초점을 맞춘이 하위 네트워크에 하나의 방법을 표준화했습니다. 클러스터. 저렴하고 간단하며 소형 마이크로 컨트롤러에서 구현할 수 있으며 중간 규모 프로젝트에 가장 적합합니까? 해커의 꿈! 왜 여러 마이크로 프로젝트에서 LIN을 사용하지 않으시겠습니까? 들어가서 이것이 당신에게 도움이되는지 알 수 있습니다.

LIN 프로토콜

로컬 미니 네트워크가 전문 용어에서 호출되는 LIN “클러스터”는 단일 마스터 마이크로 컨트롤러와 여러 슬레이브로 구성됩니다. LIN은 일반적으로 19,200 보드에서 전통적인 8N1 UART 시리얼로 시작되어 하나의 와이어로 멀리 떨어져 있습니다. 다음 으로이 단일 와이어를 버스로 사용할 수있는 프로토콜을 추가하여 여러 슬레이브간에 공유됩니다. 쉬운 UART 시리얼 커뮤니케이션을 위해 자신의 네트워크 프로토콜을 굴려려고하면 LIN과 같은 것으로 끝납니다. 사양 (PDF) 사본을 가져 와서 읽으십시오!

모든 LIN 트랜잭션은 기본적으로 동일합니다. 마스터는 수행 할 작업을 지정하는 보호 된 식별자 (PID)가 포함 된 헤더를 전송합니다. 작업은 “보고 온도 센서 2″또는 “서보 3 위치 설정”과 같은 것일 수 있습니다. 작업에 따라 1 바이트와 8 바이트 사이의 데이터가 2 바이트 체크섬으로 수행됩니다. 노예들은 어떤 일을 대답할지, 어떻게 응답하는지 알아야합니다. 따라서 “서보 3 위치 설정”이 전송되면 서보 3 슬레이브는 다음 바이트를 수신하고 그에 따라 반응해야합니다. 명령에 응답하지 않는 모든 슬레이브는 다음 프리앰블까지 데이터를 무시할 수 있습니다.

“온도 센서 2″의 경우, 온도 센서가있는 슬레이브는 명령을받은 후에 데이터를 즉시 전송합니다. 바이트 길이가 사전에 알려져 있고 센서 2만이 작업에만 반응하도록 허용되므로 마스터는 정확히 말하고, 반응에서 4 바이트를 청취하고 취해야하는 기간을 알고 있습니다.

마스터 전송 헤더와 슬레이브를 보내는이 폴링 시스템은 해당 장치가 버스에 동시에 버스에 액세스하지 못하도록 보장하므로 LIN은 단일 RX / TX 라인만으로 도착합니다. 프리앰블에는 슬레이브가 마스터 클럭에 잠그는 데 도움이되는 동기화 바이트 (0x55)가 포함되므로 슬레이브가 덜 비싼 RC 클럭 소스에서 실행될 수 있으며 자동 보라가 가능합니다.

메시지의 길이가 미리 알려져 있으므로 마스터의 폴링 루틴의 타이밍을 일정에 기록 할 수 있습니다. 마스터는 정의 된 간격으로 네트워크를 폴링하고, 슬레이브가 트랜잭션에 필요한 시간이 1.4 배 이내에 응답하지 않으면 작업이 누락 된 것으로 추정됩니다. 어느 쪽이든, 마스터가 일정에있는 다음 항목에 켜져 있으며, 그 차례가 다시 돌아올 때까지 잠재적으로 결함이있는 슬레이브를 다시 시도하지 않을 것입니다. 이는 모든 장치에 대한 알려진 업데이트 속도를 보장합니다. 이는 삶이 마스터 프로그래밍을 위해 훨씬 간단합니다.

그것들은 기초입니다. 마스터는 PID를 보내고 일련의 데이터 바이트가 뒤 따른다. 모든 것이 편안한 uart, 호출 및 응답, 가능한 한 간단하게 작은 네트워크를 만드는 것처럼 적용됩니다.

extras.

유사한 VI의 GUI LIN 구성 앱데도.
네트워크를 쉽게 유지하려면 마스터와 슬레이브가 모두 명령 세트 및 유효한 반응 길이에 모두 동의해야합니다. 그것은 LIN 클러스터가 원칙적으로 작동하는 데 필요한 많은 정보입니다. 문제가 발생할 수 있도록 도와줍니다.

또한 마스터와 슬레이브 마이크로 컨트롤러가 모두 LIN 클러스터에서 처리하는 동작을 처리하는 데 사용할 수있는 C에 대한 기존 API가 있습니다. 결합 된 이렇게하면 해커에 대해 쓸모없는 것은 아닌 LIN 버스를 명시하고 구현하기위한 기존의 워크 플로우를 만듭니다.

또한 수면 상태와 연결된 수면 및 웨이크 업 신호가있는 버스에 대해 정의 된 수면 상태와 동작이 있습니다. 모든 노예가 수면 신호에 응답해야하며, 마스터에서 들어 본 적이 없다면 4 초의 시간 초과 후에 자동으로 잠자기 상태가되어야합니다. 모든 노드, 슬레이브 또는 마스터는 웨이크 업 명령을 보낼 수 있으며, 마스터가 정상적인 폴링 일정으로 돌아 가야합니다.

LIN 버전 2.0에는 네트워크를 훨씬 더 유연하게 만드는 다양한 선택 프레임 유형이 포함되었습니다. 특히 “산발적 인 프레임”은 마지막 업데이트가 있기 때문에 새로운 데이터를 얻지 못하면 슬레이브의 반응을 선택적으로 만듭니다. “이벤트 트리거 프레임”은 새 데이터가있는 모든 슬레이브 노드가 추가로 응답 할 수있는 경우를 제외하고는 산발적 인 프레임과 같습니다.

이는 버스에 충돌 할 가능성이 소개되며,이 경우 체크섬이 추가되지 않고 마스터가 이전과 같이 슬레이브 관련 프레임으로 되돌아갑니다. 이러한 두 가지 모드는 데이터 업데이트가 드문 경우에 따라 버스를 가속화하지만 코드에 대한 일정 및 조건부 복잡성에 불확실성을 추가하십시오. 그들을 필요로하는 경우에만 사용하십시오.

마스터에는 여러 개의 일정이 있으며 그 중에 전환 할 수도 있습니다. 노예들은 상관 없어 – 어쨌든 그들과 관련된 작업을 듣습니다. 예를 들어, 개념적으로 더 간단 해지더라도 변경되지 않은 경우 마스터가 서보 위치 데이터를 매개 할 이유가 없습니다. 너의 전화.

CAN 버스와 호환되는 옵션 캐리 레이어 스펙이 있으며 로컬 LIN 클러스터를 더 큰 네트워크와 통합하는 것이 더 간단합니다. 짧은 LIN은 산업 입양을 통해 UART 버스 프로토콜을 통해 매우 철저히 생각합니다. Lin Transceiver 하드웨어의 모든 공급 업체에서 좋은 자습서를 찾을 수 있습니다. (여기에는 National Instruments의 훌륭한 소개가 있습니다.)

하드웨어 – 물리 계층

이 모든 프로토콜을 얹는 것은 일반 전압 조절기가있는 “시스템 기준”칩을위한 벅 또는 2 개를 위해 일반 트랜시버의 경우 0.25 달러에서 0.50 달러에서 $ 0.25에서 $ 0.50까지 다양한 링 트랜시버 칩입니다. 트랜시버가 수면 / 웨이크 로직을 처리하고 전원 공급 장치를 마이크로 컨트롤러로 켜고 끌 수 있기 때문에 특히 매끄럽게 매료됩니다. 이렇게하면 3.3 V에서 작동하는 슬레이브 노드가 매우 간단합니다.

작은 칩이 당신을 많이 구매합니다.
LIN 버스는 자동차 용으로 개발되므로 전형적으로 12V를 위해 전형적으로 자동차의 배선 하네스의 정맥을 통한 코스입니다. Lin Transceiver 하드웨어는 자동차 전기 시스템이 스파이크 환경이 될 수 있기 때문에 더 높은 전압을 수용 할 수 있어야합니다. 또한 송수신기 칩이 다른 누군가가 그것을 잡으려고하는 동안 송수신기 칩이 린 줄을 당기려고 할 수 있도록 버스 경합에 대처해야합니다. 그래서 과열 보호가 내장되어 있습니다. 린 송수신기는 튼튼한 거의 비스트입니다.

Punty 저항으로 끌어 올리는 I2C 라인과 달리 자동차 Lin 버스는 1 kΩ 저항으로 최대 12V까지 당겨집니다. 이 줄을 충분히 빠르게 당기려면 Lin Transceivers는 수십 밀리 암페어를 수행 할 수 있어야하므로 약간의 effery (ics) 트랜지스터가 내장되어 있습니다. 고전압 및 상대적으로 높은 라인 전류의 조합은 자동차 사양을 의미합니다. Lin Bus는 I2C가 운전자에게 의지하지 않고도 I2C가 제공하는 몇 미터보다는 40 미터 동안 좋습니다. 거리 또는 노이즈 면역이 필요한 경우 린이 거기에 있습니다.

그러나 송수신기 하드웨어조차도 12 V에서 버스를 실행하도록 강요하는 것은 없습니다. NXP와 MELEXIS의 모든 것들이 Arduino 호환 5V에서 실행되는 동안 5.5V로 실행 한 마이크로 칩 트랜시버.

그리고 송수신기 하드웨어를 전혀 사용하도록 강요하는 것은 없습니다! 단순히 PNP 트랜지스터 (또는 p- 채널 MOSFET)를 버스 라인에 연결하고 UART TX로 드라이브하여 버스를 RX 라인으로 샘플링 할 수 있습니다. 이것은 로컬 에코의 단점이 있지만 소프트웨어에서 처리 할 수 ​​있습니다. 또는 훨씬 더 많은 부분 만 있으면 이전에 본 서비스가 있습니다. 그러나 나는 스크래치로부터 LIN 트랜시버를 구현하는 해커 프로젝트를 찾을 수 없었다. 어쩌면 그것은 산업이 너무 저렴하기 때문입니다.

강점과 약점

모든 버스는 모든 경우에 이상적이지 않으며 LIN은 예외가 아닙니다. 린은 특히 빠르지 않아 19,200 보드 UAR 주위에 개발 중입니다.T. 업데이트는 마이크로 컨트롤러의 관점에서 비공식적으로 드물게 왔습니다. 시간 초과가있는 전체 길이 트랜잭션은 약 10 밀리 초가 걸립니다. 마스터가 16 개의 장치를 폴링하는 경우, 이는 7 개의 Hertz 최악의 경우의 업데이트 속도입니다. 물론 마스터는 매번 모든 장치를 폴링 할 필요가 없으며 메시지가 그 길이의 절반이 될 때까지 많은 시간이지만 200 Hz 이상을 얻지 못할 것입니다. 반면에, 신뢰성과 단순성을 위해 훌륭한 깔끔한 장치에 대한 단단한 타임 아웃을 실행할 수있는 능력 때문에 업데이트 속도가 일정하고 I2C보다 훨씬 느리지는 않습니다.

야생, 1.x 및 2.x에서 볼 수있는 두 개의 주요 버전의 두 가지 버전이 있습니다. 위에서 설명한 옵션 프레임 유형 외에도 두 버전에는 서로 다른 체크섬 수식이 있으며 2.x는 실제로 기괴합니다. 웹 기반 계산기가 필요합니다. 첨가 Mod-256 대신에, 이들은 임의의 값 (256 이상)으로부터 255를 뺀다. 그것은 0 대신 1 대신에 주위에 1을 감싸는 8 비트 오버 플로우와 같습니다.

LIN 장치는 자동차 산업 외부에서 i2c 또는 spi 외부에서 널리 퍼져 있지 않으므로 긴 샷으로 프로토콜을 처리하지 않았을 것입니다. 그러나 가능한 한 적은 수의 마이크로 컨트롤러 기반 모듈을 쉽고 저렴하게 네트워크로 네트워크로 연결하려면 하나의 와이어 (플러스 땅)를 사용하여 더 쉽게 생각하기가 어렵습니다. I2C 슬레이브 코드 작성은 확실히 피크닉이 아닙니다. UART 라인에서 특정 바이트를 청취 한 다음 반응하는 코드를 작성하여 반응 할 수 없습니다.

평범한 바닐라 UART를 버스로 바꾸고 싶습니까? Page 또는 Lin Book에서 두 개를 꺼내십시오! 이미 그렇게 했니? 우리에게 보여줘!