mcu가 실행중인 하드웨어 버전을 확인하는 좋은 방법은 무엇입니까?


13

새 제품 디자인을 연구 중이며 제품 수명 기간 동안 하드웨어 변경 / 수정이 크거나 작을 수 있습니다. 향후 펌웨어 업데이트를 위해 하드웨어 개정판을 결정하는 방법이 필요합니다. 좋은 전략은 무엇입니까?

현재 외부 저항으로 두 개의 예비 핀을 위 / 아래로 당기고 패턴을 확인하고 있습니다. 이것은 4 개의 하드웨어 개정 만 허용하지만 실제 목적으로는 충분할 수 있습니다. 향후 하드웨어 개정판에서 이러한 핀 중 하나 또는 둘 다가 필요한 경우 문제가 될 수 있습니다.

더 경제적 인 방법은 저항 분배기를 ADC 핀에 연결하는 것입니다. 각 하드웨어 버전마다 다른 값의 저항이있을 수 있습니다. 불행히도 현재 디자인에 여분의 ADC가 없습니다.

생산 중에 EEPROM 또는 MCU 플래시의 하드웨어 버전 번호를 인코딩하는 다른 방법이 될 수 있습니까? (현재 해당 시설이 없습니다.)

유연하고 강력한 방법에 대한 제안을 찾고 있다고 생각합니다.

[편집하다]

레. @ trav1s의 제안 : 주소 버스 자체는 없지만 I2C 버스에는 24LCxx EEPROM이 있습니다. 슬레이브 주소의 하위 3 비트는 고정 배선되어 있습니다. 시작하는 동안 주소 비트를 변경하고 EEPROM을 검색 할 수 있다고 생각합니다.

답변:


7

이것은 내가 지속적으로 다루는 것입니다. 우리는 다양한 서브 시스템의 다양한 버전으로 거의 10 년 동안 현장에 있었던 매우 복잡한 하드웨어를 보유하고 있습니다. 일부 하위 시스템에는 2 비트 코드가 있지만 언급했듯이 항상 충분하지는 않습니다.

EEPROM 제안은 좋은 것이지만 EEPROM을 프로그래밍하고 올바른 버전으로 보드를 채워야합니다.

내가 제안하는 것은 74HC166과 같은 8 비트 병렬 직렬 직렬 출력 시프트 레지스터입니다. 버전 번호는 PC 보드 자체에서 입력을 HIGH 또는 LOW로 묶어 입력에서 설정할 수 있으며 MCU에서 시프트 레지스터를로드하고 읽기 위해 3 개의 핀만 있으면됩니다.


나는 hw 버전이 보드에 고정되어 있기 때문에 하나의 펌웨어 버전 만 필요하며 사전 프로그래밍 된 EEPROM을 처리 할 필요가 없다. 시프트 레지스터는 약 0.1 USD에 대해 찾을 수 있으며 괜찮습니다.
morten

2
동일한 회선을 따라 I2C 버스에 매달려있는 I2C 포트 확장기를 사용할 수도 있습니다. 그래도 조금 더 비쌀 수 있습니다.
alex.forencich

8

마이크로 컨트롤러에 프로그래밍 된 버전 번호를 사용하지 않습니다. 보드 버전마다 소프트웨어가 다르지 않으면 보드 버전이 불필요한 것 같습니다. 가능한 한 최소한의 마이크로 컨트롤러 소프트웨어 버전이 있어야합니다. 각기 다른 버전으로 인해 물류 문제가 발생할 수 있습니다.

그것이 가능하기 때문에 EEPROM 코드는 좋은 생각 을 많이 별도의 장치에서 다른 보드 코드,하지만 마이크로 컨트롤러의 그것을 꺼내. EEPROM은 대용량 (플래시보다 비트 당 훨씬 비싸기)이 비싸지 만 몇 바이트 인 경우 저렴합니다. 이것은 100에서 16 센트에 불과하며 1 개의 I / O 라인 만 필요합니다.

오류 발생 가능성을 줄이는 방법은 각 보드 버전마다 다른 패키지를 사용하는 것입니다. 따라서 SOT-23의 버전 번호 1, MSOP의 다음 버전 2 등으로 EEPROM 배치를 프로그래밍하십시오. 그러면 버전 2 보드에 버전 1 EEPROM을 가질 수 없습니다.


고마워. 이것은 어리석은 질문 일지 모르지만 보드에 넣기 전에 EEPROM을 어떻게 프로그래밍해야합니까? 테이프에서 EEPROMS를 꺼내 프로그래밍하고 테이프에 다시 넣고 테이프를 PCB 어셈블러에 보낼 수있는 기능이 없습니다.
morten

@morten-공급 업체가이를 수행 할 수 있습니다. 파일 (1 바이트 :-)을 보내면 선택한 마크가 표시된 부품을 다시 프로그래밍 할 수 있습니다. 배치 크기에 따라 비용이 달라집니다. 고정 비용 + 부품 당 비용이 있습니다. 우리는 프로그래밍 자체가 저렴하지 않다면 한 번 계산했지만 수천의 경우 그만한 가치가 없었습니다.
stevenvh

4

두 개의 디지털 핀만 사용하는 옵션은 다음과 같습니다.

회로도

R1 및 C1 값을 변경하면 하드웨어 버전을 결정하기 위해 측정 할 수있는 커패시터의 충전 시간이 다를 수 있습니다.


Aha, 꽤 영리한 솔루션 :-)
morten

2

주소 버스에 사용되지 않은 공간이 있으면 MCU가 읽을 수있는 ROM에 버스 레지스터를 배치 할 수 있습니다. 레지스터에는 하드웨어의 버전 번호가 포함됩니다. MCU가 해당 주소를 읽을 때 레지스터는 해당 값을 데이터 버스에 씁니다. 레지스터는 보드에 고정 배선되어 있거나 맨손으로 버전 번호를 변경하려면 지금하는 것처럼 위로 / 아래로 묶을 수있는 핀을 만들 수 있습니다.


어쩌면 EEPROM 자체의 주소를 사용할 수도 있습니다 ... 질문 편집을 참조하십시오.
morten

확인. I2C 버스가 있다는 것을 몰랐습니다. MCU를 읽을 때 버전 번호를 다시 읽는 작은 I2C 슬레이브를 만들 수 있습니다.
travisbartley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.