მთავარი ქსელის აპარატურა SD ბარათის მიკროკონტროლერთან დაკავშირება. მონაცემთა აღდგენა მონოლითური SD და MicroSD ბარათების SD ბარათის სლოტის პინიდან

SD ბარათის მიკროკონტროლერთან დაკავშირება. მონაცემთა აღდგენა მონოლითური SD და MicroSD ბარათების SD ბარათის სლოტის პინიდან

არტემ მაკაროვი, რობინი

27.09.2014

ბოლო დროს სულ უფრო ხშირად შემოდის მონოკრისტალურ ბაზაზე დამზადებული ფლეშ დრაივები, ეგრეთ წოდებული მონოლითები, მონაცემთა აღდგენისთვის. დღეს ჩვენ ვისაუბრებთ მონაცემთა აღდგენის პროცესზე ასეთი მონოლითიდან - SD მეხსიერების ბარათი, რომელიც გაგზავნილია პარტნიორის მიერ ქალაქ კემეროვოდან. ქორწილის ვიდეო ბარათზე იყო ჩაწერილი და როცა ზეიმი წარმატებით დასრულდა და დადგა სასაჩუქრე DVD-ების რედაქტირებისა და გამოშვების დრო, ფლეშკა დიდი ხნის განმავლობაში მოკვდა.

მონოლითური SD მეხსიერების ბარათების აღდგენა

აღსანიშნავია, რომ გარედან გაუგებარია, არის თუ არა ეს "კლასიკური" SD ბარათი, PCB დაფით, NAND მეხსიერებით და კონტროლერით, თუ ერთი კრისტალი. სანამ პლასტმასის ყუთი არ გაიხსნება. ყველაზე ხშირად, ასეთი მეხსიერების ბარათების უკმარისობა გამოწვეულია თარგმანის ცხრილების წარუმატებლობით. ნაკლებად ხშირად - ელექტრომექანიკური დაზიანება.

ასეთი ბარათიდან ფაილების აღსადგენად, პირველი, რაც უნდა გააკეთოთ, არის ბროლის ნაგავსაყრელის წაკითხვა. ამისათვის დამცავი ლაქი, რომელიც მალავს მონოლითის ტრასებს და საკონტაქტო ბალიშებს, იხსნება მექანიკურად (გაწმენდა და სახეხი). რის შემდეგაც ფლეშ დრაივი ასე გამოიყურება:

მონოლითური SD ბარათის ჩანაწერები და პინი

ხილულია კონტაქტური ბალიშები, რომლებზეც დაკავშირებულია მონაცემთა ავტობუსი, ჩიპის ჩართვა, წაკითხვა/ჩაწერა დაკავებულია, დენი და ა.შ. რა თქმა უნდა, არაფერია მონიშნული, ასევე არ არის თავისუფლად ხელმისაწვდომი მონაცემთა ფურცლები, სადაც აღწერილია რა უნდა დააკავშიროთ. პინის პოვნა შესაძლებელია ზუსტად იგივე მუშა ფლეშ დრაივის აღებით (და მათი უამრავი ტიპი არსებობს და გარეგნულად იგივე ჩვეულებრივი Kingston SD-ის აღმოჩენის შემდეგ, შეგიძლიათ მიიღოთ სრულიად განსხვავებული მოწყობილობა შიგნით) და შეიარაღებული ლოგიკური ანალიზატორი, მტკივნეულად გაარკვიეთ რა სად და რატომ მიდის. ან პინოტის შეძენით იმ პირისაგან/ოფისიდან, რომელმაც უკვე შეასრულა თქვენთვის ასეთი სამუშაო.

შედეგი დაახლოებით ასეთია:

Ან ეს:

ახლა ჩვენ უნდა აღმოვფხვრათ შიდა გარდაქმნები შედეგად ნაგავსაყრელებში. პირველი ნაბიჯი არის XOR ნიღბის ამოღება, რომელიც ფლეშ დისკის კონტროლერმა გამოიყენა NAND უჯრედებზე ინფორმაციის ჩაწერისას. ამ ნიღბით სექტორი ასე გამოიყურება:

და როდესაც საჭირო XOR ნიღაბი შეირჩევა და გამოიყენება, სექტორი ღებულობს მნიშვნელოვან იერს:

XOR გარდაქმნების აღმოფხვრის შემდეგ, თქვენ უნდა დააყენოთ სწორი სექტორის გეომეტრია, აღწეროთ მარკერები და ECC მონაცემთა კორექტირების არე. შეასწორეთ ბიტის შეცდომები ECC ალგორითმის გამოყენებით. გაარკვიეთ რა თანმიმდევრობით იყო განთავსებული ბლოკები და მათი ზომა. ვინაიდან კონტროლერის ტიპი უცნობია (ეს არის მონოლითი!), აუცილებელია განისაზღვროს რომელი კოლექტორი გამოიყენოს ამ კონკრეტულ შემთხვევაში. იქნება ეს საბოლოო სურათის აწყობა სექტორის მარკერის გამოყენებით თუ დანარჩენი თარგმანის ცხრილების გამოყენებით?

სურათის აწყობის შემდეგ, შეამოწმეთ კონფლიქტური ბლოკები, რომლებსაც აქვთ იგივე მარკერი და ჩაანაცვლეთ სურათში ის, რომლითაც საბოლოო შედეგი საუკეთესო იქნება. ფაილური სისტემით ნაცნობი სურათის მიღების შემდეგ, შეგიძლიათ გახსნათ იგი ნებისმიერ დისკის რედაქტორში და ატვირთოთ მომხმარებლისთვის საჭირო ფაილები.

რა თქმა უნდა, ბევრი ოპერაცია საკმაოდ ავტომატიზირებულია, მაგრამ მიუხედავად ამისა, მონოლითებიდან (ერთკრისტალებიდან) მონაცემების აღდგენაში ჩართული სამუშაოს მოცულობა ძალიან დიდია. ყველა ინჟინერს ან კომპანიას, რომელიც აღადგენს ინფორმაციას, არ სურს ჩაერთოს ასეთ სამუშაოში. და ამ ტიპის აღდგენის ფასი ძალიან შორს არის "ბიუჯეტის" კონცეფციისგან.

აქ არის კიდევ ერთი შემთხვევა SD Sandisk-ის აღდგენის მაგალითის გამოყენებით - იგივე მონოლითი, მხოლოდ ოდნავ განსხვავებულად გაკეთებული შიგნით:

მზადაა წასაკითხად

MicroSD ფლეშ დრაივების აღდგენა

და აი, როგორ გამოიყურება საკონტაქტო ბალიშები Micro SD ბარათზე. დაუყოვნებლივ უნდა აღინიშნოს, რომ ეს არის განლაგების მრავალი ვარიანტის მხოლოდ რამდენიმე მაგალითი.

და აქ არის მონოლითური Memory Stick Pro Duo მეხსიერების ბარათის pinout ვარიანტი

ეს არ ნიშნავს, რომ ეს არის მონოლითური, მაგრამ არც ჩვეულებრივი USB ფლეშ დრაივია. მეხსიერების ჩიპი (კრისტალი) ივსება ნაერთით (წებო).

და აი, როგორ გამოიყურება მონოლითური Olympus XD Picture ბარათი, საიდანაც საჭირო იყო ფოტოების აღდგენა:

გატეხილი Micro SD-ების აღდგენა

ცალკე, უნდა აღინიშნოს დავალებების წარმატებით შესრულება MicroSD ფლეშ დრაივებიდან ინფორმაციის აღდგენისთვის, რომლებიც გატეხილია ნაჭრებად, გატეხილი ნაჭრით, სხეულში ბზარებით და ა.შ. რამდენიმე მაგალითი ქვემოთ მოცემულ სურათებში:

ყველა შემთხვევაში, როცა საუბარია ნაჭრებად გატეხილ ფლეშკაზე, გატეხილ ნაწილზე და ა.შ. შესაძლებელია ინფორმაციის აღდგენა, თუ NAND კრისტალი ხელუხლებელი რჩება. მაგალითად, ქვემოთ მოყვანილი მაგალითიდან Sandisk-ის მიკროფლეშ დრაივში, უყურადღებო მუშაობის შედეგად, ნაჭერი გაწყდა და დააზიანა წითელი ოვალურით მონიშნული ბილიკები.

Hardmaster ლაბორატორია არის ერთ-ერთი იმ მცირერიცხოვანთაგან, რომელსაც აქვს გამოცდილება და კვალიფიკაცია მონაცემთა აღდგენის მონოლითური USB, SD, microSD, Memory Stick და ა.შ. მეხსიერების ბარათები. თუ თქვენს მონოლითურ გაფუჭებულ ფლეშ დრაივზე არის მნიშვნელოვანი ფაილები, რომელთა დაბრუნებაც გსურთ, გთხოვთ დაგვიკავშირდეთ!

რამდენიმე წლის წინ, 2011 წლის მაისში, საკულტო თამაშის "Elite" შემქმნელმა დევიდ ბრაბენმა წარმოადგინა Raspberry Pi-ის ერთი დაფის კომპიუტერის პირველი კონცეფცია. ეს მომენტი ჩემს ცხოვრებაში გარდამტეხი აღმოჩნდა. ფლეშ დრაივის ზომის კომპიუტერის დამზადების იდეა გაჩნდა, მაგრამ ამან მხოლოდ Raspberry Pi Foundation-ის დახმარებით მოიპოვა.

უკვე 2011 წლის 25 ივლისს წარმოებაში შევიდა კომპიუტერის ალფა ვერსია. სამწუხაროდ, პროექტის კონცეფცია შეიცვალა და ის ახლა პოზიციონირებულია როგორც საკრედიტო ბარათის ზომის კომპიუტერი. მიუხედავად ამ გარემოებისა, მას მილიონობით ადამიანი გაჰყვა. მეც ვემორჩილებოდი ბრბოს ეფექტს, ყოველდღე ვამოწმებდი პროექტის ოფიციალურ გვერდს. ხანგრძლივი და მტკივნეული ლოდინი დაიწყო "სასწაულისთვის", რომელიც მოხდა 2012 წლის 29 თებერვალს - გაყიდვების დაწყებას.

Raspberry Pi-ს შეძენა შესაძლებელია Farnell-ის ქსელის მეშვეობით ან RS Components-დან. როგორც გაირკვა, 29 თებერვალს მხოლოდ წინასწარი შეკვეთა იყო შესაძლებელი. არცერთ ოფისს არ ჰქონდა ეს დაფები მარაგში. მოწყობილობების პირველი პარტია იყო მხოლოდ 10,000 ეგზემპლარი, ასე რომ, პროექტის გარშემო აჟიოტაჟის გათვალისწინებით, შეკვეთის გაკეთება ძალიან რთული იყო. თუმცა, ყველა სირთულის გადალახვის შემდეგ, იმავე დღეს, 14:06 საათზე კომპიუტერი ფარნელისგან 46,73 ფუნტად შეიძინეს.

ამდენი დრო დასჭირდა ჩემი რომელიმე უცხოური ბრძანების შესრულებას. მე ძალიან ვნერვიულობდი, რომ ფარნელმა, რომელმაც გადაიხადა 20 ფუნტი მიწოდებისთვის, გაგზავნა ამანათი 2012 წლის 29 მაისს (2 თვის შემდეგ) ჩვეულებრივი ფოსტით, თვალთვალის ნომრის გარეშე. გასაკვირია, რომ სამეფო და რუსული ფოსტის სიმბიოზმა 22 ივნისს ამანათი უსაფრთხოდ გადასცა. ეს იყო ყველაზე სასურველი პაკეტი ბოლო რამდენიმე თვეში, ამიტომ, სტრესს ვერ გავუძელი, სამსახურიდან დასვენება მომიწია და ფოსტაში გავრბოდი.

აზრი არ აქვს იმაზე ლაპარაკს, თუ როგორ უნდა დააკონფიგურიროთ Raspberry Pi პირველი გაშვებისთვის. ორიოდე წლით დავაგვიანე ამ თემაზე სტატია უკვე დაწერილია სხვა რესურსებზე და შემდეგ Youtubeგამოქვეყნებულია საკმარისი რაოდენობის ვიდეო. მინდა ვისაუბრო ჩემთვის მნიშვნელოვანი დიზაინის ხარვეზზე - SD ბარათის სლოტის არასასიამოვნო მდებარეობაზე. ბარათის ჩასმისას ის ძლიერ სცილდება დაფის მიღმა, რაც აფუჭებს ხელნაკეთი ქეისის იერს.

ამ პრობლემის გადაჭრის ორი ვარიანტი არსებობს: შეადუღეთ SD->microSD ადაპტერი Raspberry Pi-ზე დაყენებული კონექტორის პარალელურად (ამ ოპერაციის გაკეთება შეგიძლიათ წაიკითხოთ Habré-ის სტატიაში), ან გამოიყენეთ დაბალი პროფილის MicroSD-> SD ადაპტერი. პირველი ვარიანტი ჩემთვის უბრალოდ მიუღებელია - კარგად, მე არ ვბედავ დაფის შედუღებას, რადგან ... მეშინია ჩემი Raspberry-ის პრეზენტაციის გაფუჭების. მე ვფიქრობ, რომ საუკეთესო არჩევანია დაბალი პროფილის ადაპტერის გამოყენება.

თავდაპირველად, ასეთი ადაპტერის შეძენა ერთ-ერთ უცხოურ ონლაინ მაღაზიაში გადაწყდა. არსებობს არჩევანი, მაგრამ ასეთი წვრილმანების ღირებულება უბრალოდ აკრძალულია. ყველაზე იაფი ასლები 10 დოლარი ღირს, ზოგიერთი ნიმუში კი გულწრფელად გამოიყურება ხელნაკეთი. საბოლოო გადაწყვეტილება, რომ თავად გააკეთოთ ადაპტერი, მიიღეს DIYGadget ვებსაიტის მონახულების შემდეგ, გაითვალისწინეთ, რამდენად ადვილია მათი შექმნის გამეორება.

მზადაა? მოდით გადავიდეთ სიტყვებიდან მოქმედებაზე. ადაპტერის სწორად შესაქმნელად, მოდით შევისწავლოთ SD და microSD ბარათების სპეციფიკაციები. მე შევეცადე სისტემატიზებულიყო ყველაფერი, რაც წარმოებისთვის აუცილებელია ცხრილებში 1, 2.

ცხრილი 2: SD მეხსიერების ბარათის pinout

მეხსიერების ბარათებზე შესაბამისი კონტაქტების შეერთებით და Vss1, Vss2 კომბინაციით ვიღებთ ადაპტერის ელექტრული წრედის დიაგრამას.

ადაპტერის გასაკეთებლად გვჭირდება:
1) დამჭერი microSD-სთვის (CF TFC-WPCE-08 MICROSD CARD) – 52,22 რუბლი.
2) ორმხრივი კილიტა მინაბოჭკოვანი ლამინატის ნაჭერი დაახლოებით 4 სმ 2 ფართობით (FOIL GLASS TEXTOLITE 1.5 მმ 2 გვერდიანი პოზიციის 2%) – 3 რუბლი.
3) სამონტაჟო მასალები (რკინის ქლორიდი, კალა, ნაკადი) – 10 რუბლი.

მაშინ პროექტის ღირებულება იქნება 65 რუბლი 22 კაპიკი და გარკვეული თავისუფალი დრო. დიზაინის ღირებულების შემცირების მიზნით, შეგიძლიათ შეცვალოთ microSD ბარათის დამჭერი CF TFC-WPCER-08 MICROSD ბარათით. სამწუხაროდ, ეს ნივთი სს „პრომელექტრონიკას“ საწყობში არ იყო, ამიტომ უფრო ძვირი ვარიანტი შევიძინე. თქვენს ყურადღებას ვაქცევ იმ ფაქტს, რომ თუ თქვენ შეცვლით დამჭერის ტიპს, შესაძლოა ვერ გამოიყენოთ ჩემი შაბლონი LUT-ისთვის (ლაზერული დაუთოების ტექნოლოგია).

მე გამოვიყენე Autocad PCB-ის შესაქმნელად, რადგან... ჩემი საყვარელი SprintLayout ვერ მახარებდა საჭირო შაბლონის არსებობით. მათთვის, ვისაც უყვარს ბეჭდური მიკროსქემის დაფის შეცვლა, შეგიძლიათ ჩამოტვირთოთ წყარო DWG ფორმატში, ხოლო თუ ასეთი საჭიროება არ არის, მაშინ ცარიელი PDF ფორმატში (გირჩევთ, შეამოწმოთ ზომები PDF შაბლონის გამოყენებამდე).

შაბლონის დაფაზე გადატანის შემდეგ, ერთი ფენიდან მეორეზე გადასასვლელად გირჩევთ 0,5 მმ დიამეტრის ხვრელების გაბურღვას.

მე ვაკეთებ გადასვლას ფენიდან ფენაზე თხელი მავთულის გამოყენებით, მანამდე მომავალი ადაპტერის ტრასების დასხივება. იმ ადგილებში, სადაც ხვრელები განლაგებულია microSD დამჭერის ქვეშ, აუცილებელია თუნუქის წვეთების გახეხვა ფაილით ისე, რომ იგი დამონტაჟდეს დამახინჯების გარეშე. და ბოლოს, ჩვენ ვამონტაჟებთ დამჭერს. თუ დაფის დამზადების პროცესში გამოყენებული იყო სხვადასხვა ნაკადი, დარწმუნდით, რომ გარეცხეთ დაფა, სანამ თქვენს Raspberry Pi-ში შეხვალთ.

თავად გააკეთეთ ადაპტერი ან იყიდეთ - არჩევანი თქვენზეა. იმისათვის, რომ თქვენი არჩევანი უფრო ინფორმირებული იყოს, სპეციალურად თქვენთვის შევარჩიე შესყიდვის რამდენიმე ბმული:
1) Raspberry Pi Premium დაბალი პროფილის MicroSD (TF) SD ბარათის ადაპტერი. დაცვის საბჭო.
2) Raspberry Pi დაბალი პროფილის MicroSD SD ბარათის ადაპტერი, SD ბარათი არ დაზიანდება!!
3) MicroSD "მოკლე" SD / RS-MMC ადაპტერზე. Everdrive ურიკებისთვის, Raspberry Pi და ა.შ.
4) დაბალი პროფილის MicroSD to SD ბარათის ადაპტერი Raspberry Pi-სთვის.
5) SD ბარათის ადაპტერი Raspberry pi REV2-ისთვის + უფასო მიწოდება.

დასასრულს, მინდა ვთქვა, რომ ყველა მასალა განკუთვნილია მხოლოდ საინფორმაციო მიზნებისთვის. დეველოპმენტების გამოყენება კომერციული მიზნებისთვის კატეგორიულად აკრძალულია. მასალების რეპროდუცირება შესაძლებელია მხოლოდ ჩემი ნებართვით და ორიგინალური წყაროს მითითებით. ვისაც სურს მხარი დაუჭიროს არა მხოლოდ სიტყვით, არამედ საქმითაც და ასევე მადლობა გადამიხადოთ, გთხოვთ მომწეროთ.

მოწყობილობის დამოუკიდებლად ასაწყობად, თქვენ უნდა ჩამოტვირთოთ შემდეგი ფაილები:
1. წყაროს დაფა LUT-ისთვის DWG ფორმატში
2. LUT-ის გადახდა PDF ფორმატში

წარმატებები მცდელობებში!!!

გაკვეთილი 33

Ნაწილი 1

SPI. SD ბარათი. ცხიმიანი

დღეს ჩვენ გავაგრძელებთ ჩვენს საყვარელ თემას SPI ინტერფეისზე. ჩვენ დავასრულეთ ამ ავტობუსით ერთმანეთთან Atmega8a და ATTtiny2313 კონტროლერები. და დღეს ჩვენ შევეცდებით ამ ავტობუსის მეშვეობით ამ ინტერფეისის გამოყენებით მეხსიერების ბარათი დავაკავშიროთ მიკროკონტროლერთან SD (უსაფრთხო ციფრული).

ამ ბარათის დაკავშირება შესაძლებელია SDIO ინტერფეისის საშუალებითაც, მაგრამ ვინაიდან ასეთი ინტერფეისი არ არის მხარდაჭერილი აპარატურაში ჩვენი კონტროლერის მიერ, ამ გაკვეთილზე მას არ შევეხებით. ჩვენ გვაინტერესებს ავტობუსის კავშირის ტიპი SPI, რადგან ჩვენ უკვე გვაქვს კარგი დაგროვილი ცოდნა ამ თემაზე, ასევე ტექნიკის მხარდაჭერა კონტროლერში, რომელსაც ვაპროგრამებთ.

მიუხედავად ამისა, ჩვენ გადავხედავთ ბარათის ფეხების პინიტს ორივე ტიპისთვის

ისე, რადგან ჩვენ გვაინტერესებს მეორე ტიპი, ჩვენ მას გავუმკლავდებით.

და აქ გასაგებად ბევრი არაფერია. ჩვენ ვიცით ყველა ეს აბრევიატურა. ყველა სტანდარტული SPI ინტერფეისის პინი აქ არის და აქ ზედმეტი არაფერია.

ახლა ზოგადად რუკაზე. ეს ბარათი გვაძლევს საშუალებას შევინახოთ მისი მეხსიერების ტიპი FLASH, რომელიც EEPROM-ის ტიპის მეხსიერებასთან შედარებით ასევე არამდგრადია, ანუ დენის გამორთვისას მონაცემები არსად ქრება, მაგრამ რჩება შენახული. ასევე, ამ მეხსიერებას აქვს განსხვავებები, მათ გავეცნობით პროგრამირების პროცესში. ერთ-ერთი მთავარი განსხვავება ისაა, რომ ისევე როგორც EEPROM მეხსიერებაში, ჩვენ არ შეგვიძლია ამ მეხსიერებაში ერთი ბაიტის ჩაწერა. თეორიულად, რა თქმა უნდა, შეგვიძლია, მაგრამ იქ დაიწერება მხოლოდ ერთი ჩვენი ბაიტიდან ან მხოლოდ ნულები, FLASH-ის ტიპის მიხედვით - NOR ან NAND. ანუ ბაიტის დაწერამდე უნდა წავშალოთ ის და ამ მეხსიერების ორგანიზებიდან გამომდინარე, ჩვენ შეგვიძლია წაშალოთ მხოლოდ ბლოკებში, ამიტომ შეგვიძლია დავწეროთ მხოლოდ ბლოკებში. მაგრამ ყველაზე დიდი განსხვავებაა EEPROM-ისგან - ეს არის ფასი. ის რამდენჯერმე იაფია, ხანდახან მასშტაბის ბრძანებითაც კი იაფია ინფორმაციის ერთი შენახული ერთეულისთვის (მეგაბაიტზე, თითო გიგაბაიტზე). ამიტომ, FLASH მეხსიერებას, როგორც წესი, ყოველთვის აქვს გაცილებით მეტი ინფორმაცია.

SD-ის 4 ტიპი არსებობს, მაგრამ ამას ცოტა მოგვიანებით შევისწავლით.

მოდით დავაკავშიროთ ეს ბარათი პროტეუსში ყოფნისას

აქ ყველაფერი მარტივია. სინამდვილეში მთლად ასე არ არის. საჭიროა მეტი რეზისტორები

ეს რეზისტორები საჭიროა შესაბამისი დონის უზრუნველსაყოფად, ვინაიდან ბარათი იკვებება 3.3 ვოლტით. ზოგადად, ტექნიკური დოკუმენტაციის მიხედვით, 2.7-დან 3.6 ვოლტამდე.

ასევე პროტეუსში არ არის მითითებული, მაგრამ ფაქტობრივად ჩვენს ბარათს ცალკე დენის წყაროდან ვიკვებებთ მიკროსქემის დაყენებით, რომელიც 5 ვოლტს 3.3 ვოლტად გარდაქმნის.

უფრო სწორად, ჩვენ არაფერს დავაინსტალირებთ, არამედ გამოვიყენებთ მზა მოდულს, რომელშიც უკვე ყველაფერია დაინსტალირებული.

ჩვენ ასევე გვაქვს დაკავშირებული დისპლეი, როგორც ჩვენების ბიბლიოთეკის ფუნქციონირების გაფართოებისას.

ასე გამოიყურება ეს ყველაფერი პრაქტიკული თვალსაზრისით:

ასე გამოიყურება მოდული დამჭერით

ასეთი მოდულის პოვნა ყველგან შეიძლება, ერთი პენი ღირს. მოდული, რომელიც აკავშირებს SDIO-ს საშუალებით, უფრო მეტი ღირს. ჩვენ ასევე ვხედავთ, რომ მოდულს უკვე აქვს დაყენებული მიკროსქემა ძაბვის 3.3 ვოლტამდე შესამცირებლად. და ჩვენ ვაკავშირებთ სიმძლავრეს მხოლოდ 5 ვოლტიან კონტაქტს და არაფერს ვაკავშირებთ 3.3-ს

ასევე, მოდულზე დამონტაჟებულია ყველა დონის გამყოფი, ანუ ეს მოდული შექმნილია სპეციალურად 5 ვოლტიან მოწყობილობებთან დასაკავშირებლად.

და 32 მეგაბაიტიანი ტესტირებისთვის ფლეშ ბარათი ამოვთხარე ზუსტად მეგაბაიტი და არა გიგაბაიტი

ეს ფლეშ ბარათი გაჩუქდა კამერასთან ერთად და საუკეთესოდ შეეფერება ჩვენს ტესტებს, ყოველ შემთხვევაში არ ვიფიქრებთ, რომ ესა თუ ის ხარვეზი ბარათზე ზედმეტი მეხსიერების გამოა.

მთელი კოდი ასევე აღებულია ბოლო გაკვეთილიდან ჩვენების ბიბლიოთეკასთან ერთად, რადგან ჩვენ ძალიან აქტიურად გამოვიყენებთ ფუნქციას, რომელიც შევქმენით ბოლო გაკვეთილზე, მაგრამ რა თქმა უნდა შეიქმნა ახალი პროექტი და სახელწოდება. MYSD_SPI.

მოვიშოროთ არასაჭირო ხაზები, main()-ში მხოლოდ ეს გვექნება

ინტმთავარი( ბათილად)

ხელმოუწერელიინტმე;

პორტ_ინი();

LCD_ini(); //ჩვენების ინიციალიზაცია

Clearlcd(); //დისპლეის გასუფთავება

Setpos(0,0);

Str_LCd( "სტრიქონი 1");

Setpos(2,1);

Str_LCd( "სტრიქონი 2");

Setpos(4,2);

Str_LCd( "სტრიქონი 3");

Setpos(6,3);

Str_LCd( "სტრიქონი 4");

Delay_ms(2000);

// for (i=0;i<=22;i++) {str80_lcd(buffer2+i*20);_delay_ms(1000);}

ხოლო(1)

ვინაიდან ჩვენ არ გამოვატანთ ტექსტის სიმბოლოს სიმბოლოების მიხედვით, შეგვიძლია გამოვიყენოთ char ტიპი ცვლადში

ხელმოუწერელიchar მე;

ახლა კიდევ ერთი ნიუანსი.

იმისათვის, რომ პროტეუსში ვიმუშაოთ SD ბარათთან, საკმარისი არ არის ბარათთან ერთად თავად დამჭერის დამატება, მის თვისებებში უნდა მივამაგროთ ფლეშ ბარათის გამოსახულების ფაილიც.

არ არის რთული მისი შექმნა. ერთი გზა არის WinImage პროგრამის გამოყენებით შექმნა.

ჩვენ ვქმნით მასში ახალ ფაილს მენიუს ელემენტის File -> New გამოყენებით. აირჩიეთ ბოლო ელემენტი დიალოგში და დააჭირეთ "OK"

Proteus-ში ტესტირებისთვის საკმარისია 4 მეგაბაიტი ზომა, ამიტომ შემდეგ დიალოგში ჩვენ შევცვლით ველს სექტორების რაოდენობით და ასევე ვირჩევთ FAT12/16 ფორმატს, რადგან 32-თან მუშაობის სპეციფიკა. ბიტიანი ფაილური სისტემა ოდნავ განსხვავებულია და ჩვენ ასევე დააწკაპუნეთ "OK"

ზოგადად, რა თქმა უნდა, შეგვიძლია დავტოვოთ FAT32, რადგან ჯერ არ ვმუშაობთ ფაილურ სისტემასთან, მაგრამ გაკვეთილის შემდგომ ნაწილებში ვიმუშავებთ ფაილურ სისტემასთან და ვიმუშავებთ 12/16-ით.

შემდეგ ჩვენ ვინახავთ ჩვენს შექმნილ ფაილს მენიუს ელემენტის File -> Save As-ის გამოყენებით. და ჩვენ ვინახავთ მას საქაღალდეში, სადაც გვაქვს შენახული proteus პროექტი. მოდით დავასახელოთ ფაილი და დავაწკაპუნოთ "შენახვა"

ასევე, მაშინ ჩვენ უნდა დავრწმუნდეთ, რომ ეს ფაილი არ არის „მხოლოდ წაკითხვის“ ატრიბუტით და ამის შემდეგ ჩვენ შევძლებთ მის დაკავშირებას Proteus-ში. თქვენ მოგიწევთ ხელით შეიყვანოთ ფაილის სახელი, რადგან Proteus მოითხოვს რაიმე სახის ფორმატს და ჩვენი ფაილი უბრალოდ არ ჩანს

ჩვენ არ გვჭირდება რაიმე გზა, რადგან ფაილი მდებარეობს პროექტის საქაღალდეში. დააჭირეთ "OK".

ჩვენ არ გვჭირდება ავტობუსის ინიციალიზაცია, რადგან ჩვენი SPI დაფუძნებული იქნება პროგრამულ უზრუნველყოფაზე, ყველა ფლეშ ბარათი არ მუშაობს სწორად, ამიტომ არ დაგვჭირდება რეგისტრების გამოყენება. აპარატურა, რა თქმა უნდა, უკეთესია, მაგრამ იმისათვის, რომ საფუძვლიანად გაიგოთ, თუ როგორ მუშაობს პროტოკოლი, თქვენ ასევე გჭირდებათ პროგრამულ უზრუნველყოფასთან მუშაობა, ანუ პორტების ფეხების გადახრა. ზოგადად, დიაგრამის დათვალიერებისას შეიძლება ჩანდეს, რომ ჩვენ ყველაფერი გვაქვს აპარატურაში, რადგან მე ავირჩიე ზუსტად ეს ფეხები, ეს იმიტომ ავირჩიე ეს ასე, რომ მოგვიანებით, იქნებ ვინმემ სცადოს ტექნიკის დანერგვის საბურავებით მუშაობა. .

მოდით დავამატოთ მაკრო ჩანაცვლება პორტის ფეხებისთვის

#შეიცავს"მთავარი.თ"

#განსაზღვრაMOSI3

#განსაზღვრაMISO4

#განსაზღვრაSCK5

#განსაზღვრაSS2

მოდით დავამატოთ კოდი პორტის ინიციალიზაციის ფუნქციას ფეხების ინიციალიზაციისთვის

ბათილადport_ini( ბათილად)

პორტდი=0x00;

DDRD=0xFF;

PORTB|=(1<< SS)|(1<< MISO)|(1<< MOSI);

DDRB|=(1<< SS)|(1<< MOSI)|(1<< SCK);

ჩვენ ვტოვებთ MISO პინს შეყვანაში, რადგან ნაგულისხმევად რეესტრში ყველა ბიტი ნულის ტოლია და ჩვენ მას უბრალოდ არ ვეხებით. ჩვენ ასევე მაშინვე ჩართავთ მაღალ დონეს MOSI-სა და SS-ში და ავიყვანთ რეზისტორს MISO-ზე.

მოდით დავწეროთ ფუნქცია SPI ავტობუსზე ბაიტის გადასატანად

ბათილადSPI_SendByte( ხელმოუწერელიcharბაიტი)

{

}

მოდით დავამატოთ ცვლადი მარყუჟისთვის და თავად მარყუჟისთვის

ბათილადSPI_SendByte( ხელმოუწერელიcharბაიტი)

ხელმოუწერელიcharმე;

ამისთვის( მე=0; მე<8; მე++) //გადაადგილება ბაიტის ბიტების მიხედვით

{

}

ვფიქრობ, გასაგებია, რატომ ვითვლით 8-მდე, რადგან ზუსტად 8 ბიტს ვაგზავნით.

აბა, დავიწყოთ მათი ნელ-ნელა გადაცემა.

მოდით ჯერ შევამოწმოთ მარცხენა ბიტი, გამოვყოთ იგი მთელი ბაიტიდან დაფარვით და თუ 1-ის ტოლია, მაშინ MOSI ავტობუსზე დავაყენებთ 1-ზე, ხოლო თუ არის 0, მაშინ ავტობუსს არ შევეხებით.

ამისთვის( მე=0; მე<8; მე++) //გადაადგილება ბაიტის ბიტების მიხედვით

ჩვენ გამოვფინეთ გამოსახულება ეკრანზე SD ბარათიდან, მაგრამ მასში რაღაც პუნქტები გამოგვრჩა, პირველი იყო თავად ბარათის დაკავშირება, მეორე იყო ის, რომ ბიბლიოთეკის ფუნქციების მხოლოდ ნაწილი იყო გათვალისწინებული. Petit FatFs, მოდით უფრო დეტალურად განვიხილოთ ეს პუნქტები.

ბარათთან კომუნიკაცია შესაძლებელია ორიდან ერთი ინტერფეისით, SPIან SD.



უნდა ითქვას, რომ SD ინტერფეისს შეუძლია იმუშაოს ერთბიტიან და ოთხბიტიან რეჟიმში.

ბარათის დაკავშირების დიაგრამა SPI-ის საშუალებით არის სტანდარტული და ასე გამოიყურება გამოუყენებელი ბარათის ქინძისთავები ელექტრომომარაგებასთან 10K რეზისტორების გამოყენებით.


მაგრამ სამოყვარულო დიზაინში ხშირად უგულებელყოფილია ასაწევი რეზისტორები, რაც ამარტივებს კავშირის დიაგრამას.

გასათვალისწინებელია, რომ SPI-ით დაკავშირებისას ბარათი ძალიან მოთხოვნადია მიწოდების ძაბვაზე და მიწოდების ძაბვის უმნიშვნელო ვარდნა იწვევს ბარათის უფუნქციობას, ეს შემოწმებულია პირადი გამოცდილებიდან, SD-ზე არაფერია სათქმელი. ინტერფეისი, ჯერ არ მიცდია. ეს ყველაფერი იმისთვის დავწერე ელექტრომომარაგებისთვის აუცილებლად დააინსტალირეთ კონდენსატორები. რაც შეეხება ინდუქტორს, ის გათვლილი უნდა იყოს 100მA-მდე დენზე, მაგრამ არ არის საჭირო მისი დაყენება.

ზემოთ მოყვანილი დიაგრამები აჩვენებს, რომ ბარათს 3.3 ვოლტი ესაჭიროება, შესაბამისად, მონაცემთა გადაცემის ხაზებში ძაბვა არ უნდა სცდებოდეს 0 - 3.3 ვოლტის დიაპაზონს და აქ ჩნდება კითხვა, რა უნდა გააკეთოს, თუ MK იკვებება; 5 ვოლტი?
პასუხი მარტივია, თქვენ უნდა შეესაბამებოდეს მონაცემთა ხაზებს და ეს შეიძლება გაკეთდეს ჩვეულებრივი რეზისტენტული გამყოფის გამოყენებით.


დიაგრამა გვიჩვენებს, რომ MISO ხაზს არ სჭირდება კოორდინაცია ისე, როგორც მონაცემები გადაცემულია ამ ხაზით. ბარათიდან MK-მდე.
სინამდვილეში, რამდენიმე ადამიანი აკავშირებს ბარათს პირდაპირ MK-სთან, ბევრად უფრო მოსახერხებელია ბარათის კონექტორის დაკავშირება MK-სთან ან ფარის ყიდვა კონექტორით და ყველა საჭირო გაყვანილობით.

ჩვენ დავალაგეთ კავშირი, ახლა ვნახოთ, როგორ გამოვიყენოთ ბიბლიოთეკა Petit FatFs, რომელიც განკუთვნილია 8-ბიტიანი მიკროკონტროლერებისთვის მცირე ზომის მეხსიერებით.

ბიბლიოთეკა შედგება 5 ფაილისაგან:
მთელი რიცხვი.თ- სათაურის ფაილი, რომელიც აღწერს მონაცემთა ძირითად ტიპებს.

დისკიო.ჰ- სათაურის ფაილი, რომელშიც დეკლარირებულია დისკთან მუშაობის დაბალი დონის ფუნქციების პროტოტიპები და მათ მიერ დაბრუნებული სტატუსის კოდები.

დისკიო.გ- ამ ფაილში უნდა განხორციელდეს დაბალი დონის ფუნქციები;

pffсonf.h- კონფიგურაციის ფაილი.

pff.h- სათაურის ფაილი, რომელშიც გამოცხადებულია დისკის ფაილურ სისტემასთან ურთიერთქმედების ფუნქციების პროტოტიპები.

pff.c- ფაილი შეიცავს ფუნქციების განხორციელებას დისკის ფაილურ სისტემასთან ურთიერთობისთვის.

ჩანს, რომ ბიბლიოთეკამ იმუშაოს, საჭიროა დაბალი დონის ფუნქციების განხორციელება. მაგრამ თუ ვსაუბრობთ AVR ან PIC-ზე, მათთვის ვებსაიტზე შეგიძლიათ ჩამოტვირთოთ ბიბლიოთეკასთან მუშაობის მაგალითი, რომელიც შეიცავს ფაილს mmc, ის უკვე ახორციელებს დაბალი დონის ფუნქციებს. თქვენ ასევე უნდა დააკონფიგურიროთ ბიბლიოთეკა pff.h ფაილში და ჩაწეროთ SPI ოპერაციისთვის საჭირო ფუნქციები.

Petit FatFs-ის ფუნქციები.

FRESULT pf_mount (FATFS*)- ფუნქცია ამონტაჟებს/ამოტვირთავს დისკს. ეს ფუნქცია უნდა გამოიძახოთ დისკთან მუშაობის დაწყებამდე, თუ ფუნქციას გამოძახებთ null მაჩვენებელი, დისკი დემონტაჟდება. ფუნქციის გამოძახება შესაძლებელია ნებისმიერ დროს.

Პარამეტრები
FATFS* fs- მითითება FATFS ტიპის ობიექტზე, ამ სტრუქტურის აღწერა შეგიძლიათ იხილოთ ფაილში pff.h. ჩვენ უბრალოდ უნდა გამოვაცხადოთ ამ ტიპის ცვლადი.

დაბრუნების მნიშვნელობები:
FR_OK (0)
FR_NOT_READY- მოწყობილობის ინიციალიზაცია შეუძლებელია
FR_DISK_ERR- დისკიდან წაკითხვისას მოხდა შეცდომა
FR_NO_FILESYSTEM- დისკს არ აქვს მოქმედი FAT დანაყოფი

FATFS fs;//გამოაცხადეთ FATFS ტიპის ობიექტი //დაამონტაჟეთ დისკი, თუ (pf_mount(&fs) == FR_OK) ( //დისკი დამონტაჟებულია, ჩვენ ვმუშაობთ //დისკის ამოტვირთვა pf_mount(NULL); ) სხვა (//ვერ მოხერხდა დისკის დამონტაჟება)

FRESULT pf_open (გაგრძელება char* ბილიკი)- ფუნქცია ხსნის არსებულ ფაილს. ფაილის გახსნის შემდეგ, შეგიძლიათ მასთან მუშაობა, ანუ წაიკითხოთ მისგან და ჩაწეროთ. თქვენ შეგიძლიათ იმუშაოთ ღია ფაილთან, სანამ სხვა ფაილი არ გაიხსნება. ფუნქციის გამოძახება შესაძლებელია ნებისმიერ დროს.

Პარამეტრები
const char* გზა- მაჩვენებელი სტრიქონზე, რომელიც მიუთითებს ფაილის გზაზე. ბილიკი უნდა იყოს მითითებული მთლიანად root დირექტორიასთან შედარებით, დირექტორიების გამოყოფა ზოლით.

დაბრუნების მნიშვნელობები:
FR_OK (0)- დაბრუნდა თუ ფუნქცია წარმატებულია
FR_NO_FILE- ფაილი არ მოიძებნა
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_ENABLED- დისკი არ იყო დამონტაჟებული

FATFS fs;//გამოაცხადეთ FATFS ტიპის ობიექტი //დაამონტაჟეთ დისკი, თუ (pf_mount(&fs) == FR_OK) ( //გახსენით ფაილი, რომელიც მდებარეობს root დირექტორიაში if(pf_open("hello.txt") == FR_OK ) ( //do something ) //გახსენით ფაილი, რომელიც მდებარეობს საქაღალდეში new if(pf_open("new/hello.txt") == FR_OK) ( //do something ) //dismount the dismount pf_mount(NULL) else ( // ვერ მოხერხდა დისკის დამონტაჟება)

FRESULT pf_read(void* buff, WORD btr, WORD* br)- ფუნქცია კითხულობს ბაიტების მითითებულ რაოდენობას ფაილიდან და ინახავს მათ ბუფერში. თუ წაკითხული ბაიტების რაოდენობა მითითებულზე ნაკლებია, მაშინ ფაილის დასასრული მიღწეულია.
#define _USE_READ 1

Პარამეტრები:
ბათილად* ბუფ- მაჩვენებელი ბუფერზე, რომელშიც ინახება წაკითხული მონაცემები
WORD btr- წასაკითხი ბაიტების რაოდენობა
WORD*br- მაჩვენებელი ცვლადისკენ, რომელიც ინახავს წაკითხული ბაიტების რაოდენობას.

დაბრუნების მნიშვნელობები:
FR_OK (0)- დაბრუნდა, თუ ფუნქცია წარმატებით შესრულდა
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_OPENED- ფაილი არ გაიხსნა
FR_NOT_ENABLED- დისკი არ იყო დამონტაჟებული

FATFS fs;//FATFS ტიპის ობიექტის გამოცხადება BYTE buff;//ბუფერი ფაილის წასაკითხად WORD br; // წაკითხული ბაიტების მრიცხველი //დაამონტაჟეთ დისკი, თუ (pf_mount(&fs) == FR_OK) ( //გახსენით ფაილი, რომელიც მდებარეობს root დირექტორიაში if(pf_open("hello.txt") == FR_OK) ( //read 10 ბაიტი მისგან pf_read(buff, 10, &br if(br != 10) ( //თუ br არ არის 10-ის ტოლი //ეს ნიშნავს, რომ ჩვენ მივაღწიეთ ფაილის ბოლოს) )

FRESULT pf_write (გაუქმება * buff, WORD btw, WORD * bw)- ფუნქცია საშუალებას გაძლევთ ჩაწეროთ მონაცემები ღია ფაილში. იმისათვის, რომ ფუნქცია იმუშაოს, თქვენ უნდა ჩაწეროთ pffconf.h ფაილში
#define_USE_WRITE 1

Პარამეტრები:
ბათილად* ბუფ- მაჩვენებელი ბუფერზე, რომლის ჩაწერა გვინდა, ნულოვანი მნიშვნელობა ასრულებს ჩანაწერს
WORD btw- ბაიტების რაოდენობა, რომლის ჩაწერა გვინდა
WORD* bw- მაჩვენებელი ცვლადისკენ, რომელიც ინახავს ბაიტების რაოდენობას, რომელთა ჩაწერაც შესაძლებელი იყო. ამ ცვლადის გაანალიზებით, შეგიძლიათ გაიგოთ, მიღწეულია თუ არა ფაილის დასასრული.

დაბრუნების მნიშვნელობები:
FR_OK (0)- დაბრუნდა, თუ ფუნქცია წარმატებით შესრულდა
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_OPENED- ფაილი არ გაიხსნა
FR_NOT_ENABLED- დისკი არ იყო დამონტაჟებული

გამომდინარე იქიდან, რომ ბიბლიოთეკა განკუთვნილია მცირე რაოდენობის მეხსიერების მქონე მიკროკონტროლერებისთვის, ამ ფუნქციას აქვს მთელი რიგი შეზღუდვები:

  • თქვენ არ შეგიძლიათ შექმნათ ახალი ფაილები და შეგიძლიათ ჩაწეროთ მხოლოდ არსებულებზე
  • თქვენ არ შეგიძლიათ გაზარდოთ ფაილის ზომა
  • დროის ანაბეჭდის განახლება შეუძლებელია
  • ჩაწერის ოპერაციის დაწყება/შეჩერება შესაძლებელია მხოლოდ სექტორის საზღვარზე
  • მხოლოდ წაკითხვადი ფაილის ატრიბუტი ვერ შეუშლის ხელს ჩაწერას

იმისათვის, რომ გაიგოთ ბოლო წერტილი, თქვენ უნდა იცოდეთ, რომ ბარათის მეხსიერება დაყოფილია ბლოკებად (სექტორებად) 512 ბაიტი თითოეული და ჩაწერის დაწყება შესაძლებელია მხოლოდ სექტორის დასაწყისიდან. ამრიგად, თუ გვინდა დავწეროთ 1000 ბაიტი, მაშინ პირველი სექტორი მთლიანად ჩაიწერება, მეორეზე კი მხოლოდ 488 ბაიტი, ხოლო დარჩენილი 24 ბაიტი შეივსება ნულებით.

ღია ფაილში ჩასაწერად, თქვენ უნდა შეასრულოთ შემდეგი ნაბიჯები:

  • მაჩვენებლის დაყენება სექტორის საზღვრებზე, თუ დაყენებულია არა საზღვრებზე, კურსორი დამრგვალდება სექტორის ქვედა ზღვარზე
  • დარეკეთ ჩაწერის ფუნქციას საჭირო რაოდენობის ჯერ
  • დაასრულეთ ჩანაწერი ფუნქციის გამოძახებით null მაჩვენებლით

ჩაწერის ფუნქციის მუშაობის მაგალითის მისაცემად საჭიროა კიდევ ერთი ფუნქციის გათვალისწინება.

FRESULT pf_lseek (DWORD ოფსეტური)- აყენებს წაკითხვის/ჩაწერის მაჩვენებელს ღია ფაილში. თქვენ შეგიძლიათ დააყენოთ მაჩვენებელი აბსოლუტური ან ფარდობითი ოფსეტურით, თქვენ უნდა გადასცეთ რიცხვი ფუნქციას
pf_lseek (5000);
ნათესავისთვის, გადაიტანეთ მაჩვენებლის მნიშვნელობა მიმდინარე პოზიციაზე fs.fptrდა გადაადგილების რაოდენობა
pf_lseek (fs.fptr + 3000);
იმისათვის, რომ ფუნქცია იმუშაოს, თქვენ უნდა ჩაწეროთ pffconf.h ფაილში
#define_USE_LSEEK 1

Პარამეტრები:
DWORD ოფსეტური- ბაიტების რაოდენობა, რომლითაც საჭიროა მაჩვენებლის გადატანა.

დაბრუნების მნიშვნელობები:
FR_OK (0)- დაბრუნდა, თუ ფუნქცია წარმატებით შესრულდა
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_OPENED- ფაილი არ გაიხსნა

თქვენ შეგიძლიათ ჩაწეროთ მონაცემები ფაილში შემდეგნაირად.
FATFS fs;//FATFS ტიპის ობიექტის გამოცხადება BYTE buff;//ბუფერი ფაილის წასაკითხად WORD br; // წაკითხული ბაიტების მრიცხველი //დაამონტაჟეთ დისკი, თუ (pf_mount(&fs) == FR_OK) ( //გახსენით ფაილი, რომელიც მდებარეობს root დირექტორიაში if(pf_open("hello.txt") == FR_OK) ( //set მაჩვენებელი პირველი სექტორის pf_lseek(0) //write pf_write(buff, 10, &br) );

მე ასევე ვტოვებ აქ რეალურად მოქმედი კოდის ნაწილს, რომელიც იყენებს ზემოთ აღწერილ ყველა ფუნქციას.
#define F_CPU 8000000UL #define buff_size 10 #include #შეიცავს #include "diskio.h" #include "pff.h" #include "spi.h" FATFS fs;//გამოაცხადე FATFS BYTE ტიპის ობიექტი read_buff;//ბუფერი ფაილის წასაკითხად BYTE write_buff = "hello word"; /// /ბუფერი UINT br ფაილში ჩაწერისთვის; // წაკითხული ბაიტების მრიცხველი int main(void) ( //დაამონტაჟეთ დისკი, თუ (pf_mount(&fs) == FR_OK) ( //გახსენით ფაილი, რომელიც მდებარეობს ახალ საქაღალდეში if(pf_open("new/hello.txt") == FR_OK) (//დააყენეთ ჩაწერის მაჩვენებელი pf_lseek(0); //ჩაწერეთ pf_write(write_buff, buff_size, &br); //დაასრულეთ ჩაწერის pf_write(0, 0, &br); //დააყენეთ წაკითხვის მაჩვენებელი pf_lseek( 0 //წაიკითხეთ რა ეწერა pf_read(read_buff, buff_size, &br if(br != buff_size) ( //თუ br არ არის ტოლი buff_size //ეს ნიშნავს, რომ მივაღწიეთ ფაილის ბოლოს) ); //დისკის მოხსნა pf_mount(NULL) while(1) ( ) )

FRESULT pf_opendir (DIR* dp, const char * გზა)- ფუნქცია ხსნის არსებულ დირექტორიას და ქმნის მაჩვენებელს DIR ტიპის ობიექტზე, რომელიც გამოყენებული იქნება ღია დირექტორიაში ფაილების სიის მისაღებად.
იმისათვის, რომ ფუნქცია იმუშაოს, თქვენ უნდა ჩაწეროთ pffconf.h ფაილში
#define_USE_DIR 1

Პარამეტრები:
DIR *dp- მაჩვენებელი DIR ტიპის ცვლადზე.

const char * გზა- მითითება სტრიქონზე, რომელიც შეიცავს დირექტორიაში მიმავალ გზას, დირექტორიები გამოყოფილია ხაზით

დაბრუნების მნიშვნელობები:
FR_OK (0)- დაბრუნდა თუ ფუნქცია წარმატებულია
FR_NO_PATH- გზა ვერ იპოვა
FR_NOT_READY- ვერ მოხერხდა დისკის ინიციალიზაცია
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_ENABLED- დისკი არ იყო დამონტაჟებული

//ცვლადების გამოცხადება FATFS fs; DIR რეჟ. //დისკის დამონტაჟება pf_mount(&fs); //გახსენით დირექტორია pf_opendir(&dir, "MY_FOLDER");

FRESULT pf_readdir(DIR* dp, FILINFO* fno)- ფუნქცია საშუალებას გაძლევთ წაიკითხოთ დირექტორიის შინაარსი. ამისათვის თქვენ უნდა გახსნათ დირექტორია pf_opendir() ფუნქციის გამოყენებით და დარეკოთ pf_readdir(). ფუნქციის ყოველი გამოძახებისას ის დააბრუნებს მითითებულ დირექტორიაში მდებარე ობიექტის (საქაღალდის/ფაილის) სახელს. როდესაც ის გაიმეორებს ყველა ობიექტს, ის დააბრუნებს null სტრიქონს fno.fname მასივის ელემენტში.
იმისათვის, რომ ფუნქცია იმუშაოს, თქვენ უნდა ჩაწეროთ pffconf.h ფაილში
#define_USE_DIR 1

Პარამეტრები:
DIR *dp- მაჩვენებელი DIR ტიპის ცვლადზე, რომელიც წინასწარ უნდა იყოს დეკლარირებული

FILINFO *fno- მაჩვენებელი FILINFO ტიპის ცვლადის მიმართ, რომელიც წინასწარ უნდა იყოს დეკლარირებული.

დაბრუნების მნიშვნელობები:
FR_OK- ფუნქციის წარმატებით დასრულება
FR_DISK_ERR- დისკის შეცდომა
FR_NOT_OPENED- დირექტორია არ არის გახსნილი

FATFS fs; FRESULT რეს; FILINFO fno; DIR რეჟ. //დისკის დამონტაჟება pf_mount(&fs); //გახსენით დირექტორია res = pf_opendir(&dir, MY_FOLDER); //წაიკითხეთ დირექტორიის შიგთავსი for(;;)( res = pf_readdir(&dir, &fno); //შეამოწმეთ, იყო თუ არა შეცდომები კითხვისას //და არის თუ არა სხვა ფაილები მითითებულ დირექტორიაში, თუ ((res ! = FR_OK) || ( fno.fname == 0))( break; ) //გამოტანა მოსახერხებელი გზით fno.fname usart_sendStr(fno.name);

და ბოლოს, სამუშაო პროექტს აქ დავტოვებ

  • ანდრეასი ამბობს:

    Memory Stick ადაპტერის საკუთარი ხელით აწყობა არ არის რთული, თუ იცით კონკრეტული მეხსიერების ბარათის ფუნქციური ქინძისთავების დანიშნულება. ჩვეულებრივ უწოდებენ მეხსიერების ბარათის ან, მაგალითად, მიკროსქემის, ჩიპის და ა.შ. ზოგადად, ტექნოლოგია მარტივია. MMC (MultiMedia Card) მეხსიერების ბარათის განლაგება ამოჭრილია PCB-დან. პურის დაფაზე ამოჭრილია 7 ბილიკი (MMC-ს აქვს 7 ქინძისთავი). შემდეგ, ქვემოთ მოცემულ ფიგურაში ნაჩვენები პინოტის შესაბამისად, ტრეკები მიმაგრებულია SD მეხსიერების ბარათის ქინძისთავებზე (აქვს 9 ქინძისთავები, რომელთაგან 2 არ არის გამოყენებული), microSD (აქვს 8 პინი, რომელთაგან 2 ასევე არ არის გამოიყენება, მაგრამ გაითვალისწინეთ, რომ ბარათის microSD მეხსიერებას არ აქვს Vcc გამომავალი) ან microM2 (microM2 pinout შესაბამის თემაში Memory Stick Micro M2 ადაპტერი). Სულ ეს არის. Memory Stick ადაპტერი მზად არის.

    P.S. გვაქვს 1 და 2 GB MMC მეხსიერების ბარათები მარაგში. ღირებულება, შესაბამისად, 285 და 360 რუბლია. მიწოდება შედის მითითებულ ფასში.

    ასევე შეგიძლიათ იაფად შეიძინოთ შემდეგი ზომის მეხსიერების ბარათები:
    - Memory Stick და Memory Stick M2;
    - უსაფრთხო ციფრული (SD);
    - მინი SD;
    - Micro SD (TF);
    - კომპაქტური ფლეშ;
    -XD;
    - სხვადასხვა დიზაინის და სიმძლავრის USB ფლეშ დრაივები.
    მაგალითად, ესენი:

  • სლავა ამბობს:

    სხვათა შორის, მე არ ვარ ძალიან ნათელი ამ ნაწერებში. თქვენ ვერ მიიღებთ ტრეკებს MicroCD-დან MMC-მდე ამ გვერდზე, ძალიან მადლობელი ვიქნები.

  • ანდრეასი ამბობს:

    ასე გამოიყურება microSD to MMC ადაპტერი:

  • სლავა ამბობს:
  • სიახლე საიტზე

    >

    Ყველაზე პოპულარული