취미 친숙한 마이크로 컨트롤러에서 RAM의 명령 실행


12

내 프로젝트 중 하나는 마이크로 컨트롤러에 저장되어 있지 않지만 대신 SD 카드에 저장된 프로그램을 실행할 수 있다는 이점이 있습니다.

그래서 SD 카드의 코드를 RAM으로로드 한 다음 RAM에서 코드를 실행할 수있는 장치를 찾고 있습니다. 현재 PicKit2와 함께 제공되는 프로그래머 만 있으므로 PIC를 유지하고 싶습니다.

누구든지 PIC가 이것을 할 수있는 것을 알고 있습니까? PIC가이 기능을 수행 할 수 없다면 어떤 마이크로 컨트롤러를 사용할 수 있습니까? 바람직하게는 브레드 보드 호환 패키지로 제공되는 것들이다.


2
응? ... 램에서 정확히 무엇을 실행해야합니까? '정적'이란 무엇입니까? 실제로 자체 수정 코드를 작성하려고하지 않습니까? 동적 메모리 할당 부족에 대해 이야기하고 있습니까? 일명 아니 malloc?
Mark

2
@Mark SD 카드와 같은 외부 장치에서 프로그램을로드하여 실행할 수 있기를 원합니다. 나는 내 게시물에서 더 잘 설명하려고 노력할 것입니다.
Ponkadoodle

2
gotcha, 내가 아는 유일한 PIC는 PIC32입니다. SD 카드에서 플래시로 복사하는 것과 같은 미친 짓을하지 않으면 전환 프로그램이 자주 사용되는 경우 플래시주기가 매우 빨라집니다. 대부분의 작은 8/16 비트 uC는 데이터 (ram)와 프로그램 (플래시) 공간 사이에 크게 분할되어 있으며 프로그램 카운터가 램 (하버드 아키텍처, 메모리 보호 등)을 처리하도록 허용하지 않습니다.
Mark

답변:


5

외부 프로그램 메모리를 추가 할 수있는 몇 가지 PIC가 있습니다. 필자는이 작업을 수행 한 적이 없지만 애플리케이션 노트 AN869AN778 에는 외부 메모리를 구현하는 방법에 대한 자세한 정보가 있습니다.


11

고려해야 할 또 다른 옵션은 SD 카드에 저장된 프로그램에 통역 언어를 사용하는 것입니다. 이런 식으로 프로세서는 카드에서 읽은 기계어 코드를 실행하지 않고 단지 데이터로 취급합니다.

이 접근 방식은 속도 비용으로 유연성을 제공합니다.

선택할 수있는 옵션이 많이 있습니다 : 마이크로 컨트롤러를위한 고급 언어 통역사 / 컴파일러 조사


1
자신의 DSL을 구르십시오. 이 옵션은 제안 된 모든 솔루션 중 가장 매력적입니다.
Amos

6

이미 말했듯이 PIC (PIC32 이외)는이 작업을 수행 할 수 없습니다. 대부분의 마이크로 컨트롤러는 RAM 리소스가 매우 제한적이기 때문에 모든 패밀리의 더 큰 프로세서 나 외부 메모리 버스가있는 프로세서로 가야 할 것입니다.

MSP430 프로세서는 RAM 공간에서 코드를 실행할 수 있지만 16k RAM 공간이있는 F5438과 같은 것이 필요합니다. 128 바이트로 코드를 실행하는 것은 실제로 옵션이 아닙니다!

프로세서에 외부 버스가있는 경우 RAM을 코드 공간에 넣을 수 있습니다. 프로세서 아키텍처에서 데이터를 실행 메모리에 쓸 수없는 경우 RAM을 두 개의 메모리 영역에 매핑하기 위해 약간의 논리를 추가해야 할 수도 있습니다.

8051 기반 시스템에서 RAM에서 코드를 실행했지만 프로그래밍을 위해 RAM을 EXTERN 메모리 공간에 매핑 한 다음 실행을 위해 CODE 공간으로 다시 매핑해야했습니다. 로더 / 모니터 프로그램은 메모리 뱅크 스위칭 및 로딩을 처리했습니다. 코드를 요청하지 마십시오-약 30 년 전에이 작업을 수행했으며 길을 잃은 지 오래되었습니다 (PL / M-51로 작성)


5

메모리 아키텍처 때문에 RAM에서 저역 및 중간 범위 PIC를 실행할 수 없습니다.

모든 ARM 기반 CPU는 RAM에서 실행해야합니다. 그것들은 smd 패키지에있는 경향이 있지만, 마이크로 컨트롤러가 이미로드되어있는 'DIP'크기 모듈이 꽤 있습니다. 예를 들어 mbed 또는 LPCXpresso 를 살펴보십시오 . 둘 다 부트 로더 또는 LPCXpresso의 경우 무료 컴파일러와 함께 디버그 인터페이스와 함께 제공됩니다.

간단한 8 비트 마이크로를 유지하려면 프리 스케일 HCS08 제품군의 제품을 고려하십시오. 이것들은 RAM에서 실행할 수 있으며 무료로 사용할 수있는 코드 워리어 IDE 및 C 컴파일러의 코드 제한 버전이 있습니다.

MPS430도이 작업을 수행 할 수 있어야한다고 확신하지만 직접 수행 한 적은 없습니다.


mbed는 실제로 내장 플래시 드라이브에 복사 한 다음 재설정하여 바이너리를받습니다. 컴퓨터의 USB 포트에 연결되면 플래시 드라이브로 표시됩니다. SD 카드 대신 플래시 드라이브를 사용하거나 SD 카드의 바이너리가 자동으로 플래시 드라이브에 복사되고 재설정이 수행되도록 설정하는 방법이 있다면 운이 좋을 것입니다. mbed에는 하드웨어 프로그래머가 필요하지 않습니다.
Amos


3

SD 카드의 .hex 파일로 칩을 다시 플래시하는 AVR의 부트 로더에 대해 읽은 것을 기억합니다. 원본 소스를 찾을 수 없지만 이 Google 검색 에서 몇 가지 흥미로운 결과가 나옵니다. 예, 이것이 PIC가 아닌 AVR이라는 것을 알고 있지만 PIC가 제대로 작동하지 않으면 유용 할 수 있습니다.



3

다른 포스터에서 언급했듯이, 8 비트 또는 16 비트 PIC의 RAM에서는 하버드 아키텍처 (별도의 코드 및 데이터 공간)를 사용하므로 RAM에서 실행할 수 없습니다. SD 카드에서 프로그램을로드하여 코드 메모리에 플래시하는 것이 실용적인지 여부는이 작업을 수행하는 빈도에 따라 다릅니다.

프로그램을 지속적으로 오버레이하는 OS와 같은 동적 환경을 만들려고한다면 아니요. 그러나 제 경우에는 2GB SD 카드에서 필요에 따라 드라이버를로드하는 프로그램이 있습니다. PIC24FJ256GB110의 최소 지우기 / 쓰기주기는 10,000입니다. 이 작업을 하루에 5 번 수행하더라도 플래시는 최소 5 년 반 동안 지속됩니다.

(참고 : 10,000 숫자는 최소값입니다. 일반적인 지우기 / 쓰기주기 내구성은 5 배일 수 있습니다. 따라서 개발중인 경우 하루에 3 번 30 분마다 3 분 30 분마다 프로세서를 다시 플래시 할 수 있습니다. 8 시간 동안 – 여전히 1 년 지속될 수 있습니다.)


2

우리 학교에서는 외부 RAM이있는 HC11 또는 HC12 프로세서를 사용하여 프로그램을로드하고 실행했지만 보드 / 키트의 이름을 잊어 버렸습니다. (어쨌든 Freescale HC (S) 라인 MCU는 RAM과 ROM을 동일하게 처리합니다. 따라서 코드를 RAM에로드하고 실행할 수 있습니다.

에서 대기열을 가져 blalor오는 가장 좋은 해결책은 보드에 버튼을 추가하여 부트 로더와 함께 삽입 한 SD 카드에 저장된 데이터에서 PIC를 다시 플래시하는 것입니다. 나는 어떤 종류의 코드가 더 큰 PIC에 맞지 않을지 상상할 수 없다. 정적 데이터 (그래픽, 텍스트, 사운드)가있는 경우 외부 저장소에 보관하십시오.


1

아마도 RAM에서 할당 할 수는 없지만 응용 프로그램의 경우 작은 로더를 플래시로 사용하여 SD 카드 데이터를 나머지 플래시로 읽을 수 있습니다. 이 접근 방식을 SPI 제어 플래시 칩과 함께 사용하여 무선 링크에서 펌웨어를로드 한 다음 완전히 수신 한 후에 설치할 수 있습니다. SD 호환 부트 로더가 약간의 공간을 차지할 수 있지만 SD 카드에서 작동하지 않는 특별한 이유는 없습니다.


펌웨어와 목적이 약간 다른 장치와 비슷한 것을 수행했습니다. 모든 파일을 외부 SPI 플래시 (대부분의 마이크로 컨트롤러보다 훨씬 큰 크기로 제공)에 쓰고 이미지 중 하나로 컨트롤러를 다시 플래시하십시오 리셋 중에 버튼을 누르고 있으면 부트 로더와 함께.
Kevin Vermeer

0

꽤 많은 마이크로 컨트롤러가이를 가능하게합니다. 그림이 아닌 것처럼 들립니다. 당신이하고 싶은 것은 spi를 사용하여 sd 카드에서 읽고, 프로그램을 복사하는 부트 로더입니다. 아마 루트 디렉토리에서 알려진 또는 하드 코드 된 파일 이름이되고 싶을 것입니다. 램 프로그램. ARM 기반 컨트롤러를 사용하면 이와 같은 작업을 수행 할 수 있습니다.

다른 방법은 부트 로더가 spi를 통해 sd 카드를 읽도록하고 램에 복사하는 대신 번쩍이는 부분을 플래시의 일부에 복사하는 것입니다. 버튼을 켤 때 전원을 켜거나 재설정 한 다음 sd 카드에서 새 프로그램을로드하면 버튼이 있어야합니다. 그렇지 않으면 서명 또는 체크섬이로드 할 수있는 플래시 부분에서 부트 지점에서 플래시의 해당 부분으로 잘 보입니다. 또는 sd 카드가있는 경우 카드에서로드하거나 플래시의로드 가능한 부분으로로드하십시오. 팔 기반 및 avr 기반, 아마도 사진 기반 으로이 방법을 사용할 수 있지만 내 사진 경험은 날짜가 있습니다. msp430 나도 가정합니다. 기본적으로 마이크로 컨트롤러 프로세서 자체에서 플래시의 일부를 다시 프로그래밍 할 수 있다면


흠, 실제로 avr에서 avr을 프로그래밍하지 않았습니다. 호스트에서 직렬로 전송되어 죄송합니다. 두 개의 마이크로 컨트롤러를 사용하는 저렴한 취미 보드를 많이 볼 수있는 세 번째 솔루션을 제공합니다. 이 경우 하나는 다른 카드를 재설정 상태로 유지하고 sd 카드를 읽고 다른 마이크로 프로그램을 직렬 또는 기타 프로그램을 통해 프로그래밍 한 다음 다른 마이크로에서 재설정을 해제합니다. 취미 / 평가 보드는 종종 USB 인터페이스를위한 하나의 마이크로를 가지고 있으며 일반적으로 다른 것에 jtags합니다.
old_timer 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.