◆ 출판사 ◆
버무림
◆ 책소개 ◆
이 책은 임베디드 소프트웨어 최고의 전문가를 꿈꾸는 여러분들을 위해 집필하였다.
2022년 2월 출간된 임종수의 STM32 Cortex-M 완벽 활용서(Vol. 1)의 2번째 시리즈이 다. 전체 본문 내용은 STM32 MCU 내부에 저장되어 있는 제조사 bootloader에 대한 사용방법과 사용자 정의 bootloader를 만드는 다양하고 자세한 구현 방법을 서술하였다. 구체적으로 내부 MCU flash memory, 또는 외부 SPI serial flash memory를 이용한 ROM booting 방법과 MCU 내부 SRAM을 이용한 RAM booting 방법에 대해서 실제 제품 에 적용되는 Code를 직접 구현하고 실험할 수 있도록 구성하였다. 특별히, Windows Program인 무료 SJ_MCUFree 소프트웨어를 이용하여 개발한 임의의 실행 hex file 또는 binary file을 MCU에 downloading하여 booting할 수 있도록 다양하고, 풍부한 예제들을 수록하였다. 또한, C 언어와 Assembly 언어를 활용하여 RTOS의 구조와 동작 방법을 학습할 수 있도록 다양한 그림들과 flowchart들을 수록하였다. 무엇보다도 RTOS를 포함
한 OS(운영체제)에 대한 다양한 이론적인 개념들과 흐름을 모두 구현하면서 스스로 OS에 대한 전문가가 되도록 하였다. 예를 들면, Task Context Switching에 대한 다양한 그림들 과 설명으로 이해를 넓히고, 이를 바로 C 언어와 assembly 언어로 구현하여 완벽한 이해 와 활용을 할 수 있도록 하였다. 또한, Kernel Object인 Semaphore, Mutex, Message mailbox, 그리고, Message Queue 등등에 대한 개념과 이들을 어떻게 구현하고, 활용하 는지 철저한 설명과 완벽한 예제들로 구성하였다. 그리고, 현재, Embedded Linux와 함께 광범위하게 사용되는 무료 FreeRTOS를 활용하는 방법도 자세히 서술하였다.
이 책에서 다루는 모든 source 파일을 포함한 자료들은 항상 그러하듯이 필자의 naver cafe인 http://cafe.naver.com/limjongsulab를 참조하면 되고, 필자의 email address는 limjongsulab@naver.com이다.
필자가 저술한 Matlab, Simulink와 같은 기존의 책자들뿐만 아니라 앞으로 출간될 책자 들, 그리고, 필자의 회사에서 추진하는 여러 교육 과정들과 최신 정보들에 대한 모두 사항 들을 앞서 언급한 naver cafe에서 관리하고 있다. 이곳에서 여러분과 함께 질문과 답변을 통한 토론을 하였으며 한다. 그리고 유용한 자료들을 많이 등록하여 공유하였으면 한다.
또한, 이 책에서 사용하는 SJ_MCUPro, SJ_MCUFree windows program뿐만 아니라 SJ_MCUBook_M0, SJ_MCUBook_M3 그리고, SJ_MCUBook_M4 보드를 포함한 다양한 제품들에 대한 자료와 동영상 강좌에 대한 구매는 필자의 homepage인 https://www.sujinpub.com/shop/ 를 참조하면 된다.
◆ 목차 ◆
제1장 제조사 Bootloader 소개 13
□ 학습 목표 14
1.1 Bootloader 소개. 15
1.2 Reset의 종류와 특징 정리. 20
1.3 STM32 MCU 종류와 구분 방법 정리. 23
1.4 BOOT Mode 종류와 USART booting 실습. 26
제2장 제조사 UART Bootloader 사용 방법 - I 49
□ 학습 목표 50
2.1 USART Kernel Bootloader Protocol 분석. 51
2.2 Get(0x00) Command. 56
2.3 Get Version(0x01) Command. 70
2.4 Get ID(0x02) Command. 74
2.5 Read Memory(0x11) Command. 80
2.6 Go(0x21) Command. 89
제3장 제조사 UART Bootloader 사용 방법 - II 107
□ 학습 목표 108
3.1 Write Memory(0x31) Command. 109
3.2 Hex File 구조에 대한 이해. 123
3.3 상태도(State flow)를 이용한 Hex File downloading 방법. 135
3.4 Erase(0x43) Command. 148
□ 연구 과제 155
제4장 MCU 내부 Flash memory 사용 방법 157
□ 학습 목표 158
4.1 HxD Hex Editor 소개. 159
4.2 STM32 MCU 내부 Flash Memory 사용 방법. 172
4.2.1 Flash memory Read Access Time 소개. 174
4.2.2 Flash memory Write Access Time 소개. 178
4.2.3 STM32 내부 Flash memory 특징과 사용 방법. 182
제5장 MCU 외부 Flash memory 사용 방법 201
□ 학습 목표 202
5.1 Serial Flash Memory W25Q32 소개. 203
5.2 Serial SPI Flash Memory W25Q32FV 사용 방법. 208
5.3 Serial SPI Flash Memory 동작 원리 분석. 215
5.4 Flash Memory Instruction 정리. 227
제6장 SPI Flash memory관련 Coding 방법 249
□ 학습 목표 250
6.1 Serial Flash Memory Programming 방법. 251
6.2 Serial Flash Memory 식별을 위한 Code 구현. 267
6.3 Serial Flash Memory data를 지우는 Code 구현. 274
6.4 Serial Flash Memory로부터 데이터를 읽는 방법. 283
6.5 Serial Flash Memory에 데이터를 쓰는 방법. 289
제7장 User Bootloader를 위한 downloader 개발 305
□ 학습 목표 306
7.1 실행 binary 파일을 외부 Flash Memory에 저장하는 방법. 307
7.2 Host에서 실행 파일을 전송하는 방법. 317
7.3 MCU 내부 flash memory 또는 SRAM에 데이터 저장 방법. 349
제8장 User Bootloader 소개와 간단한 예제 구현 373
□ 학습 목표 374
8.1 간단한 User Bootloader 구현 방법 소개. 375
8.2 간단한 User Bootloader 개발과정 따라하기. 389
제9장 실전 User Bootloader 구현 방법 415
□ 학습 목표 416
9.1 MCU 내부 Main Flash memory booting 방법. 417
9.2 실제 제품에 적용되는 사례 소개. 432
9.2.1 내부 flash memory 또는 EEPROM을 사용하는 경우. 440
9.2.2 RS-485와 Modbus를 사용한 사례. 441
9.3 MCU 내부 RAM booting 방법과 의미. 446
9.4 MCU 외부 Serial Flash Memory를 이용한 booting 방법. 452
제10장 OS(운영 체제)의 구조 이해와 uC/OS-II 소개 459
□ 학습 목표 462
10.1 OS에 대한 개념과 uC/OS-II 소개 463
10.2 Multi-tasking을 위한 task scheduling과 task의 상태 473
10.3 Multi-tasking을 위한 task 전환 방법과 구현 496
10.4 Hook 함수와 uC/OS-II 간단한 예제 실습 512
□ 연구 과제 524
제11장 uC/OS-II OS와 Kernel Object의 구조와 종류 527
□ 학습 목표 528
11.1 OS 사용에 따른 stack과 heap의 관리 방법 529
11.2 Task 전환에 따른 Stack 관리 방법 541
11.3 Task와 Interrupt 사이의 전환 방법 556
11.4 Kernel object의 개념과 종류 567
제12장 uC/OS-II와 FreeRTOS 사용 방법 579
□ 학습 목표 580
12.1 uC/OS-II와 다양한 Kernel object 사용 방법 581
12.1.1 Multi-task와 단일 task의 차이점. 583
12.1.2 Mutex를 이용한 공유자원 접근과 Priority Inversion. 589
12.1.3 Semaphore를 이용한 공유자원 접근 방법. 597
12.1.4 Message Mailbox를 이용한 task간 정보 전송 방법. 603
12.1.5 Message Queue를 이용한 task간 정보 전송 방법. 610
12.2 FreeRTOS 소개와 AC6로 compiler 방법 623
12.3 FreeRTOS에 Task 등록과 사용 방법 637
□ 연구 과제 644
부록 1 SJ_MCUPro 사용 설명서 645
부록 2 SJ_MCUBook_M0/M4 보드 회로도와 설명서 653
부록 3 KEIL MDK-ARM 사용시 주의 사항 673
찾아보기 683
◆ 저자소개 ◆
임종수